前提・実現したいこと
railsでaction cableを使ってチャット機能を実装しようとしています。
発生している問題・エラーメッセージ
メッセージを送信すると送信した本人の画面には内容が非同期で反映されるのですが、別のユーザーの画面ではリロードしなければ反映されていない状況です。
チャット機能の前にコメント機能をaction cableを使って実装しており、そちらの挙動は問題ありませんでした。
該当のソースコード
config/routes.rb
ruby
1Rails.application.routes.draw do 2 mount ActionCable.server => '/cable' 3 4 devise_for :users 5 root to: 'restaurants#top' 6 resources :restaurants do 7 collection do 8 get 'search' 9 end 10 resources :comments, only: [:create, :destroy] 11 end 12 resources :messages, only: [:index, :create] 13end
app/channels/message_channel.rb
ruby
1class MessageChannel < ApplicationCable::Channel 2 def subscribed 3 stream_from "message_channel" 4 5.times { puts '***test***' } 5 end 6 7 def unsubscribed 8 end 9end
試したこと
Qiitaのこちらの記事(https://qiita.com/take18k_tech/items/00cc14c0eff45073ffc7)の「4.4 Action Cable の設定・確認」を参考に双方向通信ができているか確認したところ、ターミナルで以下のような表示になりました。
チャット画面でリロードした時
terminal
1Finished "/cable/" [WebSocket] for ::1 at 2020-10-17 21:19:45 +0900 2CommentChannel stopped streaming from comment_channel 3MessageChannel stopped streaming from message_channel 4Started GET "/cable" for ::1 at 2020-10-17 21:19:45 +0900 5Started GET "/cable/" [WebSocket] for ::1 at 2020-10-17 21:19:45 +0900 6Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket) 7***test*** 8***test*** 9***test*** 10***test*** 11CommentChannel is streaming from comment_channel 12***test*** 13***test*** 14CommentChannel is transmitting the subscription confirmation 15***test*** 16***test*** 17***test*** 18***test*** 19MessageChannel is transmitting the subscription confirmation 20MessageChannel is streaming from message_channel
コメント表示画面でリロードした時
terminal
1Finished "/cable/" [WebSocket] for ::1 at 2020-10-17 21:19:10 +0900 2CommentChannel stopped streaming from comment_channel 3MessageChannel stopped streaming from message_channel 4Started GET "/cable" for ::1 at 2020-10-17 21:19:10 +0900 5Started GET "/cable/" [WebSocket] for ::1 at 2020-10-17 21:19:10 +0900 6Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket) 7***test*** 8***test*** 9***test*** 10***test*** 11***test*** 12***test*** 13***test*** 14***test*** 15***test*** 16***test*** 17CommentChannel is transmitting the subscription confirmation 18CommentChannel is streaming from comment_channel 19MessageChannel is transmitting the subscription confirmation 20MessageChannel is streaming from message_channel
※ 5.times { puts 'test' } の記述はcomment_channel.rbにも記述しています。
これらの表示の違いが原因だと思うのですが、なぜこのようなことになっているのかわかりません。
足りない情報があればご指摘いただけると幸いです。
補足情報(FW/ツールのバージョンなど)
あなたの回答
tips
プレビュー