問題タブ [actioncable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
682 参照

ruby-on-rails - Actioncable プロセスのカスタム ログ詳細度

私は次のProcfileを持っています:

action_cableプロセスと rails プロセスの両方が、web.bashrc 変数を介してエクスポートされた $RAILS_ENV 変数を使用し、レールが起動する環境を設定します。そのため、 foreman start を実行すると、action_cableとの両方のテスト環境が読み込まれますweb。ただし、actioncable で:infoLog Level を使用し、web rails process でfatal.

両方のプロセスを起動し、ENV またはプロセス情報を使用してログ レベルを動的に設定する方法はありますか?

(疑似コード) のようなもの:

0 投票する
1 に答える
3573 参照

ruby-on-rails - Rails 5 ActionCable WebSockets がステータス 101 アップグレード応答のアップグレード ヘッダーを返さない

編集: 最後に表示され、アップグレード ヘッダーが実際に作成されたことがわかりました。

action-cable-exampleコードベースから作業して、WebSocket アプリを構築しようとしています。アプリで提供されるブラウザ クライアントに依存する「Chatty」アプリケーションは正常に動作します。ただし、外部 IoT 接続が必要なため、そのクライアントは使用しません。その結果、ws/wss WebSocket プロトコルを外部の非ブラウザー デバイスに実装しようとしています。route.rb での接続は次のとおりです。

Chrome Simple WebSocket Client 拡張機能や、 sample/client.rb を使用した gem websocket-client-simpleなど、いくつかの外部クライアントを試しました。どちらの場合も、ActionCable はアップグレード ヘッダーを返しません。Chrome 拡張機能は次のように文句を言います。

実際のハンドシェイクは、次のようにそれが真であることを示しています。

標準に従って、応答ヘッダーは次のようになります。

Sec-WebSocket-Accept は、要求ヘッダーの Sec-WebSocket-Key に基づく計算で、ws/wss が理解され、スイッチング プロトコルが発生する必要があることを確認するため、特に重要です。

このすべての間、クライアントがチェックされて接続を閉じるまで、サーバーはより満足しています。

websocket-client-simple を見ると、client.rb に返された WebSocket を分解したところ、空のヘッダーも表示されていました。コードと WebSocket を表示しています。

この応答では、インスタンス変数「@handshaked」が false として返されることに注意しました。それは関連しているかもしれませんが、これまでのところ、コード内で設定または参照されている場所は見つかりませんでした。

更新: WebSocket::Driver.start が実際にアップグレード ヘッダーを作成することがわかりました。そして、@socket.write(response)はそれらを EventMachine 経由で送信する必要があります。コード:

handshake_response は次のとおりです。

0 投票する
1 に答える
2931 参照

ruby-on-rails - ActionCable と Socket.Io は最も信頼性が高く、最もスケーラブルですか?

最も信頼性が高く、最もスケーラブルなのはどれですか? ActionCable または Socket.io?

意見に基づく回答を避けるために、仮説を証明する実際の測定データを提供してください。

ActionCable は 1 年間リリースされていますが、ActionCable を使用して実装された実稼働中のアプリはありますか?

どうも

0 投票する
0 に答える
627 参照

ruby-on-rails-5 - ActionCable を使用してページを更新しますか?

Rails 4 でサポート ダッシュボードを作成し、サポート チームがクライアントから配信されるファイルの状態とタイミングを監視できるようにしました。

このアプリケーションを Rails 5 に移行し、ActionCable を利用してアプリをリアルタイムにしたいと考えています。

私が見つけることができるActionCableのすべての例は、チャットアプリケーションまたはdeviseを使用した非常に具体的な実装です.新しいデータが利用可能になったときにページを「強制的に」更新する方法を示す一般的なチュートリアルの例は見つかりません. そのため、ファイルがスキャンされてデータが読み込まれると、ページが更新されるか、より高度なセットアップで部分 (テーブル行) がテーブルの上部に追加されます。

だから私がここで得ているのは、ActiveRecordをトリガーとして使用してページを更新するだけのActionCableの一般的なチュートリアルを知っている人はいますか、それともまだ可能ですか?

0 投票する
1 に答える
511 参照

ruby-on-rails - Rails5 では sidekiq が actioncable をサポートしていないようです。

だから私は仕事の1つでメッセージをブロードキャストしようとしています. ジョブは実行されていますが、メッセージをブロードキャストしていません。actioncable では、Puma がメッセージ ブロードキャストを実行する必要があるためですか?

0 投票する
1 に答える
783 参照

ruby-on-rails - プロキシ経由のRails 5.0.0 Actioncable

Puma と Nginx 1.10 を使用して vps にデプロイされたチャット アプリケーションがあります。nginx の構成は次のとおりです。

これは、ケーブルの config.ru ファイルです。

environment/production.rb 内

クライアントがプロキシ サーバー経由でインターネットに接続され、Chrome コンソールで次のエラーが表示されます。

「ws://ahu.mydomain.ir/cable」への WebSocket 接続に失敗しました: プロキシ サーバー経由でトンネルを確立できませんでした

プロキシのない別のクライアントでは、すべて問題ありません。

0 投票する
3 に答える
5250 参照

ruby-on-rails - アクション ケーブルを接続できません (WebSocket へのアップグレードに失敗しました)

非開発環境での websocket への接続に問題があり、これらのログ メッセージが表示されます

私は少しデバッグし、ブラウザ/javascriptによって送信されたリクエストがユニコーン(nginxで実行されている)によって受信されたリクエストとまったく同じではないことを理解しました。

ブラウザによるリクエストヘッダーは

ここでの接続は「アップグレード」ですが、Websocket リクエストの接続は「クローズ」されています (おそらく nginx が台無しにしていますか?)

そして、websocket ドライバーのこのコードは失敗しています

アップデート

これは私のnginx構成です

/cable に actioncable サーバーをマウントしました

nginx の変更により、ハンドシェイクに成功しましたが、サーバーがハートビートを送信できず、接続が切断され続けます。

0 投票する
1 に答える
1151 参照

nginx - Elastic Beanstalk で ActionCable に接続できません

Nginx と Puma を実行している Elastic Beanstalk に ActionCable をデプロイした Rails 5.0 アプリを取得しようとしています。

私は.ebextensions/nginx.config次のものを持っています:

location /cable { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade websocket; proxy_set_header Connection upgrade; }

そしてconfig/environments/production.rb

config.action_cable.allowed_request_origins = [ 'http://####.####.com', /http:\/\/####.*/ ]

アプリを Elastic Beanstalk 環境にデプロイした後、Chrome コンソールに次のエラーが表示されます。

「ws://####.####.com/cable」への WebSocket 接続に失敗しました: 接続が確立される前に WebSocket が閉じられました。

このスレッドのアドバイスに従ってみましたが、代わりにこのエラーが発生します。

'ws://####.####.com/cable' への WebSocket 接続に失敗しました: WebSocket ハンドシェイク中のエラー: 予期しない応答コード: 404

これは私の.ebextensions/nginx.configファイルが現在どのように見えるかです。

どんな助けでも大歓迎です。

0 投票する
1 に答える
6558 参照

ruby-on-rails - 「ws://example.com/cable」への WebSocket 接続に失敗しました: 予期しない応答コード: 404

Rails 5.0.0 でプロジェクトを作成しました。

さらに、このビデオとまったく同じことをしました: https://www.youtube.com/watch?v=n0WUjGkDFS0

生成されたチャネルを除きます。チャットとコメントの 2 つのチャネルを作成しました。

私も並行して読んでいます:https://github.com/rails/rails/tree/master/actioncable

routes.rb に次の行を追加しました。

mount ActionCable.server => '/cable'

application.rb に次の行を追加しました。

config.action_cable.mount_path = '/cable'

その結果、次のコマンドのプロジェクトを実行します。

rails server -b SERVER_IP -p 3020

コンソール ブラウザに次のエラーが表示されます。

「ws://site.com/cable」への WebSocket 接続に失敗しました: 予期しない応答コード: 404

プロジェクトの実行によるログの一部:

エラーは何ですか?私は何を間違っていますか?

定義:

  • SERVER_IP - サーバーの元の IP アドレスを偽装します。

  • example.com- これにより、サイトの元の URL が偽装されました。