Actioncable广播没有达到收到的JS函数

时间:2016-10-26 04:46:08

标签: ruby-on-rails actioncable

我一直试图让rails应用程序一起替换一个经过编码的php怪物。当前的版本是从非Rails数据库中提取数据,将其放入Rails数据库,然后在视图中显示它。 db主要填充温度读数,每隔几秒钟就会添加一次。我可以在Rails中显示一个静态页面而没有任何问题但是,尝试添加ActionCable /实时数据已经证明是有问题的。大多数东西似乎都运行正常但是,当我向我的频道广播时,它似乎没有点击mychannel.coffee中的Received功能。

我的设置: 服务员 - 乘客(捆绑执行乘客开始) 乔布斯 - 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中的任何内容都不会被广播触发。这令人难以置信的混乱。

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并在浏览器中引发警报。由于所有的聊天示例,我是否以错误的方式思考这个问题?还有另一个地方我抓住广播并在仅进行服务器端更改时将其推送给订阅者吗?

如果需要任何其他信息来解决此问题,请告知我们。这个问题一直困扰着我好几天。

2 个答案:

答案 0 :(得分:3)

首先,检查你的帧。你确定你收到了你想要的消息吗?

enter image description here

然后,在您的频道中,您应该为您的潜水艇设置一个ID。如果您有与模型​​相关的流,则可以从模型和通道生成所使用的广播。

class DashboardChannel < ApplicationCable::Channel
  def subscribed
    post = Post.find(params[:id])
    stream_for post
  end
end

然后您可以像这样广播到您的频道

DashboardChannel.broadcast_to(@post, @comment)

否则,您应该执行以下操作:

class DashboardChannel < ApplicationCable::Channel
  def subscribed
    stream_from 'dashboard_channel'
  end
end

但这是一种不好的做法,因为您将无法定义哪个用户传输到您的服务器。

答案 1 :(得分:0)

我要为故障排除和测试咖啡/ javascript添加的一件事是console.log是你的朋友。在整个过程中添加console.log "First step complete"等确实有助于追踪错误发生的位置。