2016-01-13 6 views
14

ActionCableチャネルを公開する宝石を作成しようとしていますが、動作させることができません。ActionCableチャネルがレールプラグインの外側にアクセスできない

これは、私は、コンソールを起動し、MyChannelを実行し、bundle installを実行して、私のメインのアプリケーションGemfileに宝石を追加私の宝石

# 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 

です。これは、チャネルが適切に含まれていることを意味する、エラーを生じさせず、エラーを生じません。

私はその後、私のメインのアプリケーション

// 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

あなたはどのバージョンのアクションキャベルですか? Rails Beta1? –

+0

@JohnKaczはい、そうです。 – Oleander

+0

MyChannelクラスで定義されたサブスクライブされたメソッドがないようです。ドキュメント([リンク](https://github.com/rails/rails/tree/master/actioncable#channel-example-1-user-appearances)から): "単に' App.cable.subscriptions.create'を呼び出す'AppearanceChannel#subscribed'を呼び出すサブスクリプションを設定します。 –

答えて

3

この回答は、宝石には適用されず、Railsアプリケーション内でのみチャンネルが作成されます。

my_channel.rbは間違った場所にあります。ベータ版(Beta3を使用しています)の間で動作が変更されたかどうかはわかりませんが、app/channels/application_cable/にあるはずです。

同じ問題が発生しましたが、チャンネルファイルの名前が不適切であることがわかりました(host_channel.rbではなくhost.rb)。ファイルの名前を変更した後、ファイルが動作し始めました。

私は、チャネルファイルは、デフォルトで特定の場所と命名規則(app/channels/application_cable/*_channel.rb)でのみ検索されると考えています。

+0

私はすべての可能な道を時折試みたと思うが、それがうまくいくかどうか再度調べるだろう。それは自動的に宝石の中に露出されるのでしょうか?それとも、レールエンジンを作りましたか? – Oleander

+0

自動的に公開されます。ちなみに、/ application_cableの部分をパスに追加するのを忘れてしまいました。それを忘れないでください!私はそれを追加するために投稿を編集した。 – ollpu

+0

申し訳ありませんが、私はあなたが宝石を作っていたことを認識していませんでした!あなたは何とかあなたのチャンネルをケーブルに知らせるべきです。私はあなたにそれを手伝うことができないのではないかと心配しています。 – ollpu