ruby-on-rails - 在 rails 插件之外无法访问 ActionCable channel

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

我正在尝试创建一个公开 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/

相关文章:

ruby-on-rails - docker 构建错误 Gem::Ext::BuildError: 错误:无法为 mimemagic-0.3.9 构建 gem native 扩展

ruby-on-rails - actioncable 无法连接到 websocket

ruby-on-rails - 找不到没有 ID 的 <Model> - rails 5

ruby-on-rails - ruby to_json :methods arguments

c - Data_Wrap_Struct 和 TypedData_Wrap_Struct 之间的区别?

ruby - (不是#dig!)如何确定深度嵌套的 Ruby 哈希中的键*存在*?

ruby - 如何在 Mac OS X 上手动构建通用 ruby​​? rvm 怎么样?

ruby-on-rails - Heroku 不使用 Gmail SMTP 发送电子邮件

ruby-on-rails - rails : Paperclip produces different results for similar videos

ruby-on-rails - ruby rails : Concatenate two pieces of data into one column