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

Rails 7 Action Cable预发布环境报错:参数数量不符(给定2,预期1)

Rails 7 + Action Cable + CableReady 预发布环境WebSocket报错:wrong number of arguments (given 2, expected 1)

在Linode上部署的Rails 7应用集成了Action Cable和CableReady,本地运行正常,但预发布环境中Action Cable无法工作,日志持续报错wrong number of arguments (given 2, expected 1)。

日志信息

Started GET "/cable" for 109.155.210.18 at 2023-06-22 15:24:01 +0100
Started GET "/cable" [WebSocket] for 109.155.210.18 at 2023-06-22 15:24:01 +0100
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: upgrade, HTTP_UPGRADE: websocket)
WebSocket error occurred: wrong number of arguments (given 2, expected 1)
WebSocket error occurred: wrong number of arguments (given 2, expected 1)
WebSocket error occurred: wrong number of arguments (given 2, expected 1)

环境版本

nginx version: nginx/1.14.0 (Ubuntu)
Phusion Passenger 6.0.1
rails (7.0.4.3)
ruby 3.2.0
actioncable (= 7.0.4.3)
cable_ready (= 5.0.0)
websocket-driver (0.7.5)

相关配置文件

cable.yml(staging环境)

staging:
  adapter: redis
  url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
  channel_prefix: wdpa

app/channels/application_cable/channel.rb

module ApplicationCable
  class Channel < ActionCable::Channel::Base
    include CableReady::Broadcaster
  end
end

app/channels/application_cable/connection.rb

module ApplicationCable
  class Connection < ActionCable::Connection::Base
  end
end

config/environments/staging.rb(相关片段)

config.cache_store = :redis_cache_store, {
    driver: :hiredis,
    url: ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" }
  }

  config.session_store(
    :redis_session_store,
    key: "_session_staging",
    serializer: :json,
    redis: {
      driver: :hiredis,
      expire_after: 1.year,
      ttl: 1.year,
      url: ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" }
    }
  )

Nginx配置(相关片段)

listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/:app_name/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/:app_name/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
location /cable {
  passenger_app_group_name wdpa_action_cable;
  passenger_force_max_concurrent_requests_per_process 0;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";
}

已尝试操作

  • 调整Action Cable与Nginx的相关配置,问题未解决
  • 参考过Action Cable在弹性Beanstalk环境下的排障思路,无效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:43:20