【发布时间】:2021-08-31 06:56:17
【问题描述】:
应用程序中有一个地方使用 ActionCable 来更新内容(帖子页面)。此功能有效,每次都在本地进行测试没有意义。
但是昨天我发现它不起作用,而只是在本地。在服务器上,相同的应用程序代码成功运行。
我已经仔细检查了十多次,问题不在后端。在 Sidekiq 的后端作业或工作人员一侧,他们成功执行了代码:
ActionCable.server.broadcast(
"post_update:#{post.to_gid_param}",
{
post_id: post.id
}.to_json
)
并且stream_from 在subscribed 在PostUpdateChannel 中成功执行。
甚至在前端也有PostUpdateChannel 的订阅。也就是说,前端向我展示了它总是在浏览器控制台中显示的内容:
PostUpdateChannel:connected()
channels: {
[CHANNEL_NAME]: {
connected() {
console.info(
`${CHANNEL_NAME}: connected()`
)
},
// ...
但是这个方法停止工作了:
received(data) {
const json = JSON.parse(data)
console.info(
`${CHANNEL_NAME}: received()`,
json
)
// ...
但同时,同样的代码在服务器上也能成功运行...
总的来说,我的问题是 - 它可能是什么?我没有看到任何错误。后端工作成功。前端好像也可以,但是恰恰是本地无法接收后端的数据????
Rails 6.1.3.2、ActionCable 6.1.3.2、Webpacker 5.4.0
@rails/webpacker 5.4.0、@rails/actioncable 6.1.3、actioncable-vue 2.4.6
【问题讨论】:
-
你看到日志
[ActionCable] Broadcasting to ...了吗? -
@LamPhan 这不在本地或服务器上的日志中。但一切都在服务器上运行。
-
当然在生产服务器上没有调试日志,但是在本地(我假设在开发环境中)如果这些日志没有显示,这意味着
Broadcaster不是广播消息。 -
@LamPhan 有趣。为什么会发生这种情况?订阅时,前端将 ID 传输到 Channel - 我检查过。
-
可能是
adapter: async的原因,我不确定,您可以在本地尝试redis。
标签: ruby-on-rails vue.js ruby-on-rails-6 actioncable