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
相关产品推荐
相关产品推荐

