【问题标题】:ActionCable channel not accessible outside rails pluginActionCable 频道在 Rails 插件之外无法访问
【发布时间】:2016-04-17 20:15:34
【问题描述】:

我正在尝试创建一个公开 ActionCable 频道的 gem,但我无法让它工作。

这是我的宝贝

# lib/my_channel.rb
class MyChannel < ActionCable::Channel::Base
  def wait(data)
    # logic ...
  end
end

# lib/engine.rb
module MyApp
  class Engine < ::Rails::Engine
    isolate_namespace MyApp
  end
end

然后我将 gem 添加到我的主应用程序 Gemfile,运行 bundle install,启动控制台并运行 MyChannel。这不会产生和错误,这意味着该频道已正确包含。

然后我将它添加到我的主应用程序中

// application.js
var socket = "ws://localhost:3000/cable";
var cable = ActionCable.createConsumer(socket);
cable.subscriptions.create({ "channel": "MyChannel" }, {
  received: function(){
    // ...
  }
});

但是我收到了这个错误

Subscription class not found ({"command"=>"subscribe", "identifier"=>"{\"channel\":\"MyChannel\"}"})

我错过了什么?

【问题讨论】:

  • 您使用的是哪个版本的 Action Cabel? Rails Beta1?
  • @JohnKacz 是的,没错
  • 您的 MyChannel 类中似乎没有定义订阅方法。来自文档 (link):“只需调用 App.cable.subscriptions.create 即可设置订阅,这将调用 AppearanceChannel#subscribed
  • @JohnKacz 不,没必要
  • 好的,抱歉。我还没有对 Action Cable 做太多事情(它在我的清单上),但为什么没有必要呢?我看到的频道类的每个示例都有一个订阅方法。

标签: ruby-on-rails ruby ruby-on-rails-5 actioncable


【解决方案1】:

此答案不适用于 gems,仅适用于 Rails 应用程序中的频道。

您的my_channel.rb 位于错误的位置。我不确定测试版之间的行为是否发生了变化(我使用的是 beta3),但它应该位于app/channels/application_cable/

我遇到了同样的问题,并意识到我的频道文件命名不当(host.rb 而不是host_channel.rb)。重命名文件后,它开始工作了。

我相信默认情况下仅使用特定位置和命名方案 (app/channels/application_cable/*_channel.rb) 搜索频道文件。

【讨论】:

  • 我想我当时尝试了所有可能的路径,但我会再试一次,看看它是否有效。它会在 gem 中自动公开,还是我必须创建一个 rails 引擎?
  • 自动曝光。顺便说一句,我忘了将 /application_cable 部分添加到路径中。记得添加那个!我编辑了帖子以添加它。
  • 对不起,我没有意识到你正在制作宝石!您应该以某种方式让 Cable 了解您的频道。恐怕我帮不了你。
  • 好的,我看了一下源码。在 github.com/rails/rails/blob/master/actioncable/lib/action_cable/… 中搜索这些类。因此,您应该以某种方式将您的班级列入该名单。
  • 我又查看了源代码。这些类在 github.com/rails/rails/blob/master/actioncable/lib/action_cable/… 中加载。 config.channel_paths -list 可以通过初始化器中的 ActionCable.server.config 访问。希望这会有所帮助!
猜你喜欢
  • 2019-12-17
  • 2017-12-12
  • 2014-08-07
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
相关资源
最近更新 更多