You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Rails+Turbo broadcasts_refreshes时WebSocket连接失败排查

Rails 7.1.3 + Turbo 2.0.5 broadcasts_refreshes WebSocket连接错误解决方案

核心问题解答

  1. 不是身份验证问题:终端里的undefined method 'write_nonblock' for nil错误,本质是ActionCable无法和Redis建立有效连接,导致无法写入数据,和身份认证无关。
  2. 复用应用的ActionCable连接逻辑:Turbo的Turbo::StreamsChannel会使用app/channels/application_cable/connection.rb中的认证逻辑,你的connection.rb为空时,默认允许所有连接,所以认证不是故障原因。
  3. rails s不会自动启动Redis:Redis需要你手动启动,Rails服务器不会帮你启动依赖的Redis服务。

解决步骤

  • 启动并验证Redis服务
    执行redis-cli ping,如果返回PONG说明Redis正常运行;如果没有响应,手动启动Redis:
    • macOS用Homebrew:brew services start redis
    • 直接启动:redis-server
  • 简化ActionCable配置
    1. 移除routes.rb中手动添加的mount ActionCable.server => "/cable",Rails 7默认已经配置了这条路由。
    2. 修改config/environments/development.rb中的配置,缩小允许的来源范围更安全:
      config.action_cable.url = "ws://localhost:3000/cable"
      config.action_cable.allowed_request_origins = ["http://localhost:3000"]
      
  • 确认Redis配置正确性
    检查config/cable.yml的开发环境配置,确保URL和运行的Redis实例一致:
    development:
      adapter: redis
      url: redis://localhost:6379/1
    
  • 重启Rails服务器
    所有配置修改后,重启rails s确保配置生效。

额外检查点

  • 确认turbo-rails安装完整:执行./bin/rails turbo:install,确保生成了所有必要的前端文件和配置。
  • 检查浏览器控制台是否有其他JavaScript错误,排除前端加载问题。
  • 验证模型中的broadcasts_refreshes拼写正确,模型能正常加载。

内容的提问来源于stack exchange,提问作者nimmolo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:03:14