Канал 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).