【问题标题】:Hotwire websocket connection failed for Rails6 + Nginx and Phusion Passenger 6.0.4Rails6 + Nginx 和 Phusion Passenger 6.0.4 的 Hotwire websocket 连接失败
【发布时间】:2021-12-14 05:11:11
【问题描述】:

我正在尝试使用 Hotwire for Rails,它与我的开发环境完美配合,但在部署到我们的 UAT(暂存)环境后出现 websocket 连接问题。

堆栈

红宝石:3.0.0

导轨:6.0.3.5

Nginx:1.14.1

乘客:Phusion Passenger 6.0.4

nginx.conf 在我的网关服务器上

upstream myapp {
    server myapp.uat.mycompany.com.au:80;
}

server {
    server_name myapp.uat.mycompany.com.au;

    location / {
        proxy_pass http://myapp;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /cable {
        proxy_pass http://active_migration;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
   }

    listen 443 ssl; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/myapp.uat.mycompany.com.au/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/myapp.uat.mycompany.com.au/privkey.pem; # managed by Certbot

}

server {
    if ($host = myapp.uat.mycompany.com.au) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    server_name myapp.uat.mycompany.com.au;
    listen 80;
    return 404; # managed by Certbot
}

nginx.conf 在我的应用服务器上

server {
  server_name myapp.uat.mycompany.com.au;
  listen 80;
  underscores_in_headers on;
  passenger_enabled on;
  passenger_app_env uat;
  root /var/www/myapp/current/public;

  location /cable {
     passenger_app_group_name myapp_action_cable;
     passenger_force_max_concurrent_requests_per_process 0;
  }
}

cable.yml

 development:
      adapter: redis
      url: <%= ENV.fetch("ACTION_CABLE_URL") { "redis://localhost:6379/8" } %>
      channel_prefix: myapp

    test:
      adapter: test

    uat:
      adapter: redis
      url: <%= ENV.fetch("ACTION_CABLE_URL") { "redis://localhost:6379/8" } %>
      channel_prefix: myapp

    production:
      adapter: redis
      url: <%= ENV.fetch("ACTION_CABLE_URL") { "redis://localhost:6379/8" } %>
      channel_prefix: myapp

uat.rb(环境配置文件)

config.action_cable.url = 'wss://myapp.uat.mycompany.com.au/cable'
config.action_cable.allowed_request_origins = ['https://myapp.uat.mycompany.com.au', 'http://myapp.uat.mycompany.com.au']

Chrome 控制台中显示的错误

connection.js:70 WebSocket connection to 'wss://myapp.uat.mycompany.com.au/cable' failed: WebSocket is closed before the connection is established.

uat.log 中的错误

I, [2021-10-29T15:13:33.876173 #668]  INFO -- : [25f60292-8a89-4ce5-9f35-fb3ad56bef00] Started GET "/cable" for 10.1.32.123 at 2021-10-29 15:13:33 +1100
I, [2021-10-29T15:13:33.876890 #668]  INFO -- : [25f60292-8a89-4ce5-9f35-fb3ad56bef00] Started GET "/cable/" [WebSocket] for 10.1.32.123 at 2021-10-29 15:13:33 +1100
I, [2021-10-29T15:13:33.876966 #668]  INFO -- : [25f60292-8a89-4ce5-9f35-fb3ad56bef00] Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: upgrade, HTTP_UPGRADE: websocket)
E, [2021-10-29T15:13:33.877255 #668] ERROR -- : [25f60292-8a89-4ce5-9f35-fb3ad56bef00] WebSocket error occurred: wrong number of arguments (given 2, expected 1)
E, [2021-10-29T15:13:33.878046 #668] ERROR -- : WebSocket error occurred: wrong number of arguments (given 2, expected 1)
E, [2021-10-29T15:13:34.234885 #668] ERROR -- : WebSocket error occurred: wrong number of arguments (given 2, expected 1)
E, [2021-10-29T15:13:36.397514 #20846] ERROR -- : WebSocket error occurred: wrong number of arguments (given 2, expected 1)

注意:上述WebSocket错误不断发生...

我google了一下,发现有人有类似的问题,所以尝试了解决方案 注释掉 uat.rb 环境文件中的 config.action_cable.url 并将 action_cable_meta_tag 放入 application.html.slim 文件,但它不起作用。

我花了很多时间,有人可以解释一下吗?

【问题讨论】:

    标签: ruby-on-rails websocket


    【解决方案1】:

    它在我的生产环境中运行良好。我能看到的唯一区别是,在我的生产环境中,乘客版本是 Phusion Passenger 6.0.4。

    将尝试升级我的登台乘客版本

    【讨论】:

    • 最好将此事实编辑到您的问题中,或者甚至将其作为对您自己问题的评论。
    猜你喜欢
    • 2021-01-02
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 2018-12-19
    相关资源
    最近更新 更多