我正在尝试创建一个公开 ActionCable channel 的 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
。没有屈服和错误,这意味着 channel 已正确包含。</p>
然后我将其添加到我的主应用程序
// 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\"}"})
我错过了什么?
最佳答案
此答案不适用于 gem,仅适用于在 Rails 应用中创建 channel 。
您的 my_channel.rb
位于错误的位置。我不确定 beta 之间的行为是否发生了变化(我使用的是 beta3),但它应该位于 app/channels/application_cable/
中。
我遇到了同样的问题,并意识到我的 channel 文件命名不当(host.rb
而不是 host_channel.rb
)。重命名文件后,它开始工作。
我相信默认情况下仅使用特定位置和命名方案 (app/channels/application_cable/*_channel.rb
) 搜索 channel 文件。
关于ruby-on-rails - 在 rails 插件之外无法访问 ActionCable channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34756809/