ActionCable出现“未找到订阅类”问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ActionCable出现“未找到订阅类”问题相关的知识,希望对你有一定的参考价值。
我使用Rails 5.1.5,我有以下代码。
应用程序/信道/ application_cable / channel.rb
module ApplicationCable
class Channel < ActionCable::Channel::Base
end
end
应用程序/信道/ application_cable / connection.rb
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user
def connect
self.current_user = find_verified_user
logger.add_tags 'ActionCable', current_user.slug
end
private
def find_verified_user
if verified_user = env['warden']&.user
verified_user
else
reject_unauthorized_connection
end
end
end
end
应用程序/信道/ notifications_count_channel.rb
class NotificationsCountChannel < ApplicationCable::Channel
def subscribed
end
end
JS代码包含:
global.App.cable.subscriptions.create({ channel: 'NotificationsCountChannel',
connected: () => {
console.log('connected');
},
rejected: () => {
console.log('rejected');
},
disconnected: () => {
console.log('disconnected');
},
received: (data) => {
console.log(data);
},
});
客户端可以成功连接到位于'/ cable'默认路径的WebSocket。但是订阅NotificationsCountChannel并不成功。这是日志:
Started GET "/cable" for 127.0.0.1 at 2018-02-24 20:50:31 +0300
Started GET "/cable/" [WebSocket] for 127.0.0.1 at 2018-02-24 20:50:31 +0300
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
Subscription class not found: "NotificationsCountChannel"
此外,我无法在rails控制台中检查NotificationsCountChannel
:
NameError (uninitialized constant NotificationsCountChannel)
看起来Rails没有加载NotificationsCountChannel类。
运行bin/rails r 'puts ActiveSupport::Dependencies.autoload_paths'
会给出一个不包含app/channels
的路径列表。它可以通过添加来修复
config.autoload_paths += %W(#{config.root}/app/services)
配置/ application.rb但它没有解决主要问题。
我错过了什么?
原来答案很简单:缺乏关注。
实际上channels
dir是项目的根目录,而不是app
目录。
以上是关于ActionCable出现“未找到订阅类”问题的主要内容,如果未能解决你的问题,请参考以下文章
Websocket握手期间的Rails ActionCable错误
ActionCable Rails 5 (Passenger) - 失败:WebSocket 握手期间出错:意外响应代码:404
在 Rails 中的控制台无法使用 Actioncable 广播