14

我正在尝试创建一个公开 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\"}"})

我错过了什么?

4

1 回答 1

3

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

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

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

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

于 2016-03-09T15:54:26.703 回答