让 WebSocket 在 Rails 上与 Ruby 一起工作 vs Puma 和 Nginx
Make WebSocket work with Ruby on Rails vs Puma and Nginx
Rails 应用程序上有一个使用 Ubunut、Nginx、Puma 和 Ruby 设置的暂存环境。它工作正常。我正在尝试创建相同的独立环境,但无法设置 WebSockets。我需要一些帮助来找出问题所在,以及 WebSocket 连接失败的原因。目前它显示以下错误:
WebSocket connection to 'wss://upgrade.mysite.com/cable' failed: application-2c9281fcfd42a4b226b2bec3c0a6f9aaca5f7295cefd1099d252d3689e9e19d0.js:49276
Nginx 服务器配置为基本身份验证和 SSL
以下是sites-available/mysite中的WebSocket配置:
upstream app {
server unix:/home/myuser/mysite/current/tmp/sockets/puma.sock fail_timeout=0;
}
server {
...
location @app {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://app;
}
location /cable {
proxy_pass http://app;
proxy_http_version 1.1;
proxy_set_header Upgrade websocket;
proxy_set_header Connection Upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
...
}
我不确定是否需要任何其他设置或如何调试 WebSocket 连接。任何帮助表示赞赏。甚至建议如何调试它对我来说都很重要。
rails 站点上的 ruby 工作正常,只有 WebSocket 无法连接。部署是使用 Capistrano 完成的。
问题出在 config/application.rb
文件中。我已经正确设置了以下配置选项:config.action_cable.url = https://test.mysite.com
但是没有设置 config.action_cable.allowed_request_origins
正确的 config/application.rb
文件应该如下所示:
require 'active_model/railtie'
require 'active_record/railtie'
require 'action_controller/railtie'
require 'action_mailer/railtie'
require 'action_view/railtie'
require 'action_cable/engine'
require 'sprockets/railtie'
Bundler.require(*Rails.groups)
module MyModule
class Application < Rails::Application
...
config.action_cable.url = https://test.mysite.com
config.action_cable.allowed_request_origins = [/https:\/\/test.mysite.com/]
...
end
end
Rails 应用程序上有一个使用 Ubunut、Nginx、Puma 和 Ruby 设置的暂存环境。它工作正常。我正在尝试创建相同的独立环境,但无法设置 WebSockets。我需要一些帮助来找出问题所在,以及 WebSocket 连接失败的原因。目前它显示以下错误:
WebSocket connection to 'wss://upgrade.mysite.com/cable' failed: application-2c9281fcfd42a4b226b2bec3c0a6f9aaca5f7295cefd1099d252d3689e9e19d0.js:49276
Nginx 服务器配置为基本身份验证和 SSL
以下是sites-available/mysite中的WebSocket配置:
upstream app {
server unix:/home/myuser/mysite/current/tmp/sockets/puma.sock fail_timeout=0;
}
server {
...
location @app {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://app;
}
location /cable {
proxy_pass http://app;
proxy_http_version 1.1;
proxy_set_header Upgrade websocket;
proxy_set_header Connection Upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
...
}
我不确定是否需要任何其他设置或如何调试 WebSocket 连接。任何帮助表示赞赏。甚至建议如何调试它对我来说都很重要。
rails 站点上的 ruby 工作正常,只有 WebSocket 无法连接。部署是使用 Capistrano 完成的。
问题出在 config/application.rb
文件中。我已经正确设置了以下配置选项:config.action_cable.url = https://test.mysite.com
但是没有设置 config.action_cable.allowed_request_origins
正确的 config/application.rb
文件应该如下所示:
require 'active_model/railtie'
require 'active_record/railtie'
require 'action_controller/railtie'
require 'action_mailer/railtie'
require 'action_view/railtie'
require 'action_cable/engine'
require 'sprockets/railtie'
Bundler.require(*Rails.groups)
module MyModule
class Application < Rails::Application
...
config.action_cable.url = https://test.mysite.com
config.action_cable.allowed_request_origins = [/https:\/\/test.mysite.com/]
...
end
end