質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Action Cable

Action Cableは、WebSocketをRailsに組み込む機能。Rails4でオプションとして存在していたWebSocketをRails5で標準機能したものです。Railsアプリケーションと同様のスタイルで、Rubyを用いたリアルタイム機能を記述できます。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Q&A

1回答

1803閲覧

ActionCableでSocket Connectionエラーが出る。

T.Adams

総合スコア40

Action Cable

Action Cableは、WebSocketをRailsに組み込む機能。Rails4でオプションとして存在していたWebSocketをRails5で標準機能したものです。Railsアプリケーションと同様のスタイルで、Rubyを用いたリアルタイム機能を記述できます。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

0グッド

0クリップ

投稿2020/04/28 09:53

疑問点

Docker上に構築したRailsアプリケーションを用いて、ActionCableを用いたリアルタイムチャットを作成しています。

Consoleでエラー検出され、作成したroom_channel.jsのconnectedメソッドに処理が来ません。
ブラウザの検証機能を用いてConsoleを開くと、action_cable.jsthis.webSocket = new adapters.WebSocket(this.consumer.url, protocols);の部分で以下のエラーが検出されました。

参考文献にDevelopmentモードでは、http://localhost:3000 のみ許可。という記載があるのですが、いまいち根拠がわかっていません。
やはりDockerコンテナのポート番号が3000ではないことが原因なのでしょうか。

Console

1WebSocket connection to 'ws://localhost:81/cable' failed: Error during WebSocket handshake: Unexpected response code: 404

action_cable.js

javascript

1(一部抜粋) 2Connection.prototype.open = function open() { 3 if (this.isActive()) { 4 logger.log("Attempted to open WebSocket, but existing socket is " + this.getState()); 5 return false; 6 } else { 7 logger.log("Opening WebSocket, current state is " + this.getState() + ", subprotocols: " + protocols); 8 if (this.webSocket) { 9 this.uninstallEventHandlers(); 10 } 11 this.webSocket = new adapters.WebSocket(this.consumer.url, protocols); 12 this.installEventHandlers(); 13 this.monitor.start(); 14 return true; 15 } 16};

room_channel.js

import consumer from "./consumer" consumer.subscriptions.create("RoomChannel", { connected() { console.log('I am Jack') }, disconnected() { }, received(data) { }, speak: function(message) { return this.perform('speak'); } });

参考文献

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

レンタルサーバで、3000番ポートを閉じた状態ですが、development環境で、cableが使用出来ました。

その時のconfigの設定は 

config.action_cable.url = '/cable'
config.action_cable.allowed_request_origins = [/http:///, /https:///]
config.web_console.whitelisted_ips = '0.0.0.0/0'
ActionCable.server.config.disable_request_forgery_protection = true

を追記しました。
nginxの設定で、誤ったproxy_passを設定したときに、同様のエラーになりました。

投稿2020/05/15 06:22

編集2020/05/15 06:29
pinpoint-k

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問