Ruby on Rails 6中ActionCable的receive(data)方法无法生效如何解决?
ActionCable Windows本地环境故障排查步骤
- 检查Puma worker配置(针对async适配器失效)
async适配器是进程内广播方案,仅支持单worker运行模式。打开config/puma.rb,确认开发环境下的workers配置为0或直接注释该行,多worker模式下不同进程无法共享async适配器的消息队列。 - 校验Redis服务状态(针对Redis适配器失效)
打开Windows终端执行redis-cli ping,确认返回PONG:- 若命令报错,说明本地Redis服务未启动,手动启动Redis后再重启Rails服务
- 若命令正常返回,打开
config/cable.yml核对开发环境下Redis的连接地址、端口、密码配置,确认没有配置本地独有的错误参数
- 检查跨域配置
打开config/environments/development.rb,核对config.action_cable.allowed_request_origins配置,将你本地访问服务的地址(例如http://127.0.0.1:3000、http://localhost:3000)加入允许列表,ActionCable会拦截未在允许列表的来源请求。 - 清理本地缓存重启服务
依次执行以下命令清理残留缓存后重启服务:
Windows环境下Spring预加载经常会缓存旧配置,清理后可排除配置不生效的问题。spring stop rm -rf tmp/cache rm -rf public/assets rails s - 日志验证
观察Rails运行终端的日志,创建新消息时确认是否存在[ActionCable] Broadcasting to room:XX的输出:- 存在输出说明后端广播逻辑正常,可打开浏览器控制台查看WebSocket帧,确认消息是否正常下发到前端
- 不存在输出可确认适配器配置未生效,重新核对前三项配置即可。
内容的提问来源于stack exchange,提问作者rererbit
相关产品推荐
相关产品推荐

