私はをwebsocket機能に使用するRails 5アプリケーションを持っています。ActionCableが本番環境では動作しなくなった
私の開発環境では、すべて正常に動作し、ブラウザクライアントはAction Cable
チャネルに正常に接続します。
私の生産環境では、Action Cable
はある時点で動作していましたが、突然明白な原因がなく突然機能しなくなりました。
開発マシンAction Cable
でアプリを実行しているときにRAILS_ENV
をproduction
に変更した場合、正常に動作します。基本的な環境は同じですが、実際のプロダクションマシンでアプリを実行すると、何か違うようです。
私はクロームコンソールに表示特定のエラー:
mydomain.com/:1 WebSocket connection to 'wss://mydomain.com/cable' failed: WebSocket is closed before the connection is established
。他のブラウザでも同様のエラーが表示されるため、ブラウザに関連しているようには見えません。妨害していないことを確かめるために、テスト中にadblockersを無効にしました。
Development.rb ENV関連のセットアップ:
config.action_cable.url = "ws://localhost:#{port}/cable"
Production.rb ENV関連のセットアップ:
hostname = ENV.fetch('HOSTNAME')
port = ENV.fetch('PORT')
base_url = "#{hostname}:#{port}"
config.action_cable.url = "wss://#{hostname}/cable"
config.action_cable.allowed_request_origins = ["https://#{base_url}", "https://#{hostname}"]
私はウェブサーバとしてPuma
使用。 Webサーバーは、有効な証明書がインストールされているSSL接続を提供します。プロダクションマシンでは、Pumaはポート3000
でアプリケーションを提供しますが、これはルータのポート443
に転送されます。
私の開発マシンとプロダクションでのアプリケーションの実行との唯一の顕著な違いは、本番環境ではSSLが使用されていることです。
AWSを使用していますか? – Shannon
@Shannon Nope、Synology NAS上のドッカーコンテナを使用してホストされています – edwardmp
repの不足でこの問題についてコメントすることはできません。あなたはこれを提供するために何を使用していますか? Nginx? Apache?ローカルに設定された 'production'を使って動作するという事実は、Webサーバーの設定に問題があることを示します。どのDockerコンテナを実行していますか? NAS上でどのようなOSが動作していますか?これらのすべての情報が必要です。 – FanaHOVA