2016-01-13 14 views
14

Sto cercando di creare un gioiello che esponga un canale ActionCable, ma non riesco a farlo funzionare.Canale ActionCable non accessibile al di fuori del plugin per rotaie

Questo è il mio gioiello

# 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 

Ho quindi aggiungere la gemma ai miei principali applicazioni Gemfile, correre bundle install, avviare la console e corro MyChannel. Che non cede e errore, il che significa che il canale è stato incluso correttamente.

Ho quindi aggiungere questo al mio principale

// application.js 
var socket = "ws://localhost:3000/cable"; 
var cable = ActionCable.createConsumer(socket); 
cable.subscriptions.create({ "channel": "MyChannel" }, { 
    received: function(){ 
    // ... 
    } 
}); 

Ma io sto ottenendo questo errore

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

Che cosa mi manca?

+0

Quale versione di Action Cabel è attiva? Rails Beta1? –

+0

@JohnKacz sì, questo è giusto – Oleander

+0

Sembra che tu non abbia un metodo sottoscritto definito nella tua classe MyChannel. Dai documenti ([link] (https://github.com/rails/rails/tree/master/actioncable#channel-example-1-user-appearances)): "Semplicemente chiamando' App.cable.subscriptions.create' imposterà l'abbonamento, che chiamerà 'AppearanceChannel # subscribed'" –

risposta

3

Questa risposta non si applica alle gemme, solo rendendo i canali all'interno di un'app Rails.

La tua my_channel.rb si trova nel posto sbagliato. Non sono sicuro che il comportamento sia cambiato tra le beta (sto usando la versione beta3), ma dovrebbe trovarsi in app/channels/application_cable/.

Si è verificato lo stesso problema e ho realizzato che il mio file di canale è stato denominato in modo inappropriato (host.rb anziché host_channel.rb). Dopo aver rinominato il file, ha iniziato a funzionare.

Credo che i file di canale vengano cercati solo con la posizione specifica e lo schema di denominazione (app/channels/application_cable/*_channel.rb) per impostazione predefinita.

+0

Penso di aver provato tutti i possibili percorsi alla volta, ma ci riproverò per vedere se funziona. Sarà esposto automaticamente nella gemma o devo creare un motore di rotaie? – Oleander

+0

Viene automaticamente esposto. A proposito, ho dimenticato di aggiungere la parte/application_cable al percorso. Ricorda di aggiungere quello! Ho modificato il post per aggiungerlo. – ollpu

+0

Scusate, non avevo realizzato che stavate creando un gioiello! Dovresti rendere Cable consapevole del tuo canale in qualche modo. Temo di non poterti aiutare con quello. – ollpu

Problemi correlati