I'm trying to create a gem which exposes an ActionCable channel, but I can't get it to work.
This is my 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
I then add the gem to my main applications Gemfile, run bundle install, start up the console and run MyChannel. Which don't yield and error, meaning that the channel as been included properly.
I then add this to my main application
// application.js
var socket = "ws://localhost:3000/cable";
var cable = ActionCable.createConsumer(socket);
cable.subscriptions.create({ "channel": "MyChannel" }, {
received: function(){
// ...
}
});
But I'm getting this error
Subscription class not found ({"command"=>"subscribe", "identifier"=>"{\"channel\":\"MyChannel\"}"})
What am I missing?
This answer doesn't apply to gems, only making channels within a Rails app.
Your my_channel.rb is located in the wrong place. I'm not sure if behaviour has changed between the betas (I'm using beta3), but it should be located in app/channels/application_cable/.
I was experiencing the same issue, and realized my channel file was named inappropriately (host.rb instead of host_channel.rb). After renaming the file, it started working.
I believe the channel files are only searched for with the specific location and naming scheme (app/channels/application_cable/*_channel.rb) by default.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With