在rails插件外无法访问ActionCable通道

Lin*_*der 14 ruby ruby-on-rails ruby-on-rails-5 actioncable

我正在尝试创建一个暴露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
Run Code Online (Sandbox Code Playgroud)

然后我将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(){
    // ...
  }
});
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误

Subscription class not found ({"command"=>"subscribe", "identifier"=>"{\"channel\":\"MyChannel\"}"})
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

oll*_*lpu 3

这个答案不适用于 gem,仅适用于在 Rails 应用程序中创建通道。

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

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

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