私は乱雑にコード化されたPHPの怪獣を置き換えるために一緒にレールアプリを取得しようとしています。現在のインカネーションは、Rails以外のデータベースからRailsデータベースにデータを引き込み、それをビューに表示しています。 dbには、主に数秒ごとに追加される温度値が入力されます。私はRailsに問題なく静的なページを表示できますが、ActionCable /リアルタイムデータを追加しようとすると問題があることが判明しました。ほとんどのことが適切に機能しているようですが、自分のチャンネルにブロードキャストすると、mychannel.coffeeのReceived関数にヒットしないようです。アクション可能な放送が受信JS機能を受信しません
マイセットアップ: サーバ - 旅客(execの乗客の開始をバンドル) ジョブズ - Resque ActionCable - Redisの
データは生のSQLをつかみ、新しいレコードを作成し、ジョブによってlegacydbから輸入されます。その後、別のジョブがチャンネルにブロードキャストされます。
問題はActionCableから来ていると私は思います。私が見つけることができるすべての例では、JSをトリガーするユーザー入力が必要です。しかし、私は厳密にサーバー側から物事を引き起こそうとしています。この仕事:
class DatabroadcastJob < ApplicationJob
queue_as :default
self.queue_adapter = :resque
def perform
ActionCable.server.broadcast 'dashboard_channel', content: render_thedata
end
private
def render_thedata
dataArr =[Data1.last, Data2.last, Data3.last]
ApplicationController.renderer.render(partial:
'dashboard/data_tables', locals: {item: dataArr})
end
end
作品。できます。私は放送がdashboard_channelに当たっているのを見ます。しかし、ダッシュボードの中の何も、ブロードキャストによって引き起こされるものはありません。これは非常に混乱しています。
Dashboard.coffee
App.dashboard = App.cable.subscriptions.create "DashboardChannel",
connected: ->
# Called when the subscription is ready for use on the server
disconnected: ->
# Called when the subscription has been terminated by the server
received: (data) ->
# Called when there's incoming data on the websocket for this channel
alert data['content']
何も起こりません。ログにはブロードキャストが表示されますが、dashboard.coffeeには何も表示されず、ブラウザにアラートが表示されます。すべてのチャットの例のために私はこれについて間違った方法を考えていますか?私は放送をつかんで、それを加入者に押し付ける別の場所はありますか?
これに対処するために他の情報が必要な場合は、私にお知らせください。この問題は、今、私を日々精神的に動かしています。
ガイダンスをありがとうございます。私は放送を稼働させることができましたが何らかの理由でアラートをポップアップしたくないようでした。私の最終的なユースケースでは、ダッシュボードコントローラのcoffeescriptでjQuery関数を作成して部分的な部分を再描画しました。私はばかだからdiv属性に "id"の代わりに "name"を使用していたので、そこにも問題がありました。乾杯! – Scaylos
私が強調したいことの一つは、 'stream_for'と' stream_from'の主な違い*です。これは私を見つけるのにしばらく時間がかかりました。私は 'stream_forを使って名前付きストリームで放送していましたが、うまくいきませんでした。' stream_from'が必要でした。これに注意してください。 –