【问题标题】:Make WebSocket work with Ruby on Rails vs Puma and Nginx使 WebSocket 与 Ruby on Rails 与 Puma 和 Nginx 一起工作
【发布时间】:2021-12-09 10:13:31
【问题描述】:

有一个使用 Ubunut、Nginx、Puma 和 Ruby on Rails 应用程序设置的暂存环境。它工作正常。我正在尝试创建相同的单独环境并且无法设置 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 连接。任何帮助表示赞赏。甚至建议如何调试它对我来说也很重要。

ruby on rails 网站工作正常,只有 WebSocket 连接失败。使用 Capistrano 完成部署。

【问题讨论】:

  • 你应该能够在你的 nginx 日志中找到一些信息来调试它。还要确保您使用的 nginx 版本 >= 1.3,我记得很多年前 nginx 版本有问题。

标签: ruby-on-rails nginx websocket puma


【解决方案1】:

问题出在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

【讨论】:

    猜你喜欢
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多