Канал ActionCable недоступен вне rails plugin
Я пытаюсь создать драгоценный камень, который предоставляет канал ActionCable, но я не могу заставить его работать.
Это мой драгоценный камень
# 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
Затем я добавляю жемчужину в свои основные приложения 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\"}"})
Что мне не хватает?
Ответы
Ответ 1
Этот ответ не применим к драгоценным камням, только создавая каналы в приложении Rails.
Ваш my_channel.rb
расположен не в том месте. Я не уверен, изменилось ли поведение между бетами (я использую beta3), но он должен быть расположен в app/channels/application_cable/
.
У меня возникла одна и та же проблема, и я понял, что мой файл канала был назван ненадлежащим образом (host.rb
вместо host_channel.rb
). После переименования файла он начал работать.
Полагаю, что файлы каналов только по умолчанию просматриваются с помощью конкретной схемы определения местоположения и именования (app/channels/application_cable/*_channel.rb
).