【问题标题】:For what reason can ActionCable stop working partially and only locally?ActionCable 出于什么原因会部分停止工作并且仅在本地停止工作?
【发布时间】:2021-08-31 06:56:17
【问题描述】:

应用程序中有一个地方使用 ActionCable 来更新内容(帖子页面)。此功能有效,每次都在本地进行测试没有意义。

但是昨天我发现它不起作用,而只是在本地。在服务器上,相同的应用程序代码成功运行。

我已经仔细检查了十多次,问题不在后端。在 Sidekiq 的后端作业或工作人员一侧,他们成功执行了代码:

ActionCable.server.broadcast(
  "post_update:#{post.to_gid_param}",
  {
    post_id: post.id
  }.to_json
)

并且stream_fromsubscribedPostUpdateChannel 中成功执行。

甚至在前端也有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


【解决方案1】:

通过替换这个问题解决了:

# config/cable.yml

development:
  adapter: async

关于这个:

# config/cable.yml

development:
  adapter: redis
  url: redis://localhost:6379/1

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多