Ruby on rails ActionCable频道无法在rails插件外部访问

Ruby on rails ActionCable频道无法在rails插件外部访问,ruby-on-rails,ruby,ruby-on-rails-5,actioncable,Ruby On Rails,Ruby,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

我正在尝试创建一个公开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
但我得到了这个错误

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

我遗漏了什么?

这个答案不适用于gems,只在Rails应用程序中创建频道。

您的
my_频道.rb
位于错误的位置。我不确定Beta之间的行为是否发生了变化(我使用的是beta3),但它应该位于
app/channels/application\u cable/

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


我相信频道文件在默认情况下只能使用特定的位置和命名方案(
app/channels/application\u cable/*\u channel.rb
)进行搜索。

您使用的是哪个版本的Action Cabel?Rails Beta1?@JohnKacz是的,没错。看起来在MyChannel类中没有定义订阅方法。从文档():“只需调用
App.cable.subscriptions.create
即可设置订阅,该订阅将调用
AppearanceChannel#subscribed
”@JohnKacz否,这不是必需的OK,抱歉。我还没有对Action Cable做太多的工作(它在我的清单上),但为什么没有必要呢?我看到的每个channel类示例都有一个subscribed方法。我想我当时尝试了所有可能的路径,但我会再试一次,看看它是否有效。它将在gem中自动公开,还是我必须创建一个rails引擎?它将自动公开。顺便说一下,我忘了将/application\u电缆部分添加到路径中。记得加上那个!我编辑了这篇文章来添加它。对不起,我没意识到你在做宝石!你应该让有线电视知道你的频道。恐怕我帮不了你。好吧,我看了一下消息来源。在中搜索这些类。所以你应该设法把你的类放到这个列表上。我又看了一遍源代码。这些类被加载到。可通过初始化器中的ActionCable.server.config访问config.channel_path-列表。希望这有帮助!
Subscription class not found ({"command"=>"subscribe", "identifier"=>"{\"channel\":\"MyChannel\"}"})