【发布时间】: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 文件,但它不起作用。
我花了很多时间,有人可以解释一下吗?
【问题讨论】: