2017-07-14 86 views
1

我有一个ActionCable通道,其“订阅”方法永远不会被调用。ActionCable“订阅”方法没有被调用

在Rails日志和在Javascript中的控制台,我可以看到,连接正在取得:

I, [2017-07-14T16:02:28.759843 #10658] INFO -- : [ActionCable] Registered connection (Z2lkOi8vd2ViY2FzdC9Vc2VyLzM0NQ) 
... 
I, [2017-07-14T16:14:18.594274 #12208] INFO -- : [2cdfb51d-e500-49bd-8d7d-c941b8b2bb8a] Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket) 

在app /资产/ Javascript角/信道/ chats.coffee(下)代码出现被称为:

... 
App.global_chat = App.cable.subscriptions.create { 
     channel: "ChatsChannel" 
     chat_room_id: $("#chat_room_id").val() 
     user_agent: navigator.userAgent 
    }, 
... 

的浏览器控制台显示聊天对象,它看起来如预期:

> App.global_chat 
< Subscription {consumer: Consumer, identifier: "{"channel":"ChatsChannel","chat_room_id":"32","use… like Gecko) Chrome/58.0.3029.110 Safari/537.36"}", connected: function, disconnected: function, received: function…} 
... 

但是日志没有显示ChatsChannel“订阅”方法(粘贴在下面)中的任何内容,并且“register_connection”方法从不调用。

# app/channels/chats_channel.rb 
class ChatsChannel < ApplicationCable::Channel 

    def subscribed 
    logger.add_tags 'ActionCable', "subscribing" 
    logger.info("subscribing") 
    stream_from "chat_rooms_#{params['chat_room_id']}_channel" 
    current_user.register_connection(params[:chat_room_id], params[:user_agent]) 
    end 
    ... 
end 

有什么想法?我对ActionCable很陌生。我能找到的所有文档都说“订阅”方法只是在连接被注册时自动调用,它似乎是这样,所以我无法弄清楚这里有什么问题。

这是actioncable 5.0.1。

有什么办法通过Javascript强制ruby“订阅”的方法吗?

回答

0

原来,问题是我的redis服务器没有在后台运行。在Rails应用以外运行redis-server解决了这个问题!