2016-01-13 7 views
14

Я пытаюсь создать драгоценный камень, который предоставляет канал ActionCable, но я не могу заставить его работать.Канал ActionCable недоступен вне rails plugin

Это мой драгоценный камень

# 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\"}"}) 

Что мне не хватает?

+0

Какая версия действия Cabel у вас есть? Rails Beta1? –

+0

@JohnKacz yes, thats right – Oleander

+0

Похоже, у вас нет подписанного метода, определенного в вашем классе MyChannel. Из документов ([link] (https://github.com/rails/rails/tree/master/actioncable#channel-example-1-user-appearances)): «Просто вызов« App.cable.subscriptions.create » будет настраивать подписку, которая будет называться 'AppearanceChannel # signeded' ' –

ответ

3

Этот ответ не относится к драгоценным камням, только создавая каналы в приложении Rails.

Ваш my_channel.rb находится не в том месте. Я не уверен, изменилось ли поведение между бетами (я использую beta3), но оно должно быть расположено в app/channels/application_cable/.

Я столкнулся с той же проблемой, и понял, что мой файл канала был назван неправильно (host.rb вместо host_channel.rb). После переименования файла он начал работать.

Полагаю, что файлы канала ищутся только по определенной схеме местоположения и именования (app/channels/application_cable/*_channel.rb).

+0

Я думаю, что я пробовал все возможные пути вовремя, но я попробую еще раз, чтобы увидеть, работает ли это. Будет ли она автоматически открываться в драгоценном камне или я должен создать рельсовый движок? – Oleander

+0

Он автоматически открывается. Кстати, я забыл добавить часть/application_cable к пути. Не забудьте добавить это! Я отредактировал сообщение, чтобы добавить это. – ollpu

+0

Извините, я не понимал, что вы делаете драгоценный камень! Вы должны как-то сделать Cable осведомленным о вашем канале. Боюсь, я не могу с этим поделать. – ollpu