私は、バックエンドサーバーとしてrails 5アプリを、フロントエンドアプリケーションにemberアプリケーションを実行しています。彼らは、2個の異なるドメインでホストされている二つの別々のアプリケーションです - たとえば、backend.dev
とfrontend.dev
ActionCableを別のホストに接続する
Railsアプリケーションは、次のようになりますapp/channels/application_cable/connection.rb
で発見シンプルな接続クラスを持っています
module ApplicationCable
class Connection < ActionCable::Connection::Base
def connect
Rails.logger.debug("env: #{env.inspect}")
Rails.logger.info("cookies.signed: #{cookies.signed.inspect}")
end
end
end
私はシンプルなベースチャンネルを持っています以下でapp/channels/application_cable/channel.rb
のクラス:
module ApplicationCable
class Channel < ActionCable::Channel::Base
end
end
そしてapp/channels/events_channel.rb
で、そのクラスの単一の実装:
class EventsChannel < ApplicationCable::Channel
def subscribed
Rails.logger.debug("env: #{env.inspect}")
Rails.logger.info("cookies.signed: #{cookies.signed.inspect}")
stream_from 'events'
end
end
私は物事のember側で、私はemberケーブルパッケージを使用しています。私が得るとき、私は一部デバッグ出力を見ているように私は、私の消費者が正しくセットアップされていることをかなり確信している
cableService: Ember.inject.service('cable'),
setupConsumer: Ember.on('init', function() {
let service = this.get('cableService');
let consumer = service.createConsumer(`ws://backend.dev`);
let channel = 'EventsChannel';
consumer.subscriptions.create(channel, {
disconnected() {
Ember.debug(`${channel}#disconnected`);
},
connected() {
Ember.debug(`${channel}#connected`);
},
:私は次のようにコントローラクラスを拡張して、私のフロントエンドでのセットアップの私の消費者をしました私のJSコンソールに次のような出力:しかし
DEBUG: EventsChannel#disconnected
は、私も同様に、コンソールに奇妙なエラーを見ている:
WebSocket connection to 'ws://backend.dev/' failed: Error during WebSocket handshake: Unexpected response code: 200
私はSじゃありませんここでレスポンスコードのエラーをどうすればいいのですか?そして、私のレールアプリには何も記録されていません。ドメイン間でactioncableを動作させるためにセットアップが必要なことは何ですか?ここで200応答コードが意味することは何ですか?
あなたのconfig/routes.rbをして何ですか?どこにActionCable( '/ cable'?)をマウントしていますか?' service.createConsumer'コールにあなたのマウントポイントを追加するだけでよいでしょう。 '' Mount ActionCable.server => '/ cable' 'in routes.rb – Undo
' config/environmentに 'contentSecurityPolicy'を含むのを忘れましたか?'' self-ws://backend.dev/backend.dev "、' – kumkanillam
に感謝します@Undoと@kumkanillam - 私はActionCableをマウントしていますサーバは 'mount ActionCable.server => '/ cable''を使用して' backend.dev/cable'へのリクエストが404を生成する間、 'backend.dev'へのリクエストは" unexpected response 200 "エラーを返します。上記のコメントと同様に 'connect-src'設定をしています。 – matt