ActionCable / Websocket 不适用于 Puma

ActionCable / Websocket not working with Puma

问题

在开发过程中,我在我的 Rails 服务器和 ActionCable 之间拆分了进程。

➜  backend git:(dev) bundle exec puma cable/config.ru -p 1337
Puma starting in single mode...
* Version 3.12.0 (ruby 2.5.1-p57), codename: Llamas in Pajamas
* Min threads: 0, max threads: 16
* Environment: development

我的配置很经典

# cable/config.ru
require_relative '../config/cable_environment'
Rails.application.eager_load!

run ActionCable.server

在我的 development.rb 我有那些

# Set Action Cable server url for consumer connection
config.action_cable.url = 'wss://localhost:4001'
config.action_cable.allowed_request_origins = [
  'https://localhost:4000',
]

看起来它正在运行。与此同时,我在 VueJS 中使用了一些分离的前端来监听 websockets。 您应该知道整个配置在几天前就可以正常工作了。

当我尝试从前端监听套接字时,它会这样做

action_cable.js?f5ee:241 WebSocket connection to 'wss://localhost:4001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

我所知道的

SSL 已正确配置(正如我之前所说,它实际上可以正常工作)并且配置看起来非常好。我也不是唯一一个从事这个 Rails 项目的人,而是唯一一个面临这个问题的人。

当我尝试检查端口是否正在使用时,我执行以下操作

lsof -ti:4001

我注意到根本没有 运行 进程,我不知道如何解决这个问题。由于 websocket 服务器似乎是 ActionCable 的实习生,我真的不知道如何搜索崩溃的原因,没有显示错误,puma 启动并且 运行,但 websockets 没有。

我试过的

我不记得我在过去几天里做了什么可能会破坏 Websockets,所以我尝试了很多东西

我不知道的事

我对通过 ActionCable 生成 Websocket 的机制一无所知。为什么没有任何错误?它是如何工作的 ?我是否遗漏了配置中的某些内容?它是否与 NPM / Node / Apollo 之类的其他任何东西交互 哪些可能在我的计算机上发生了变化?我使用多种技术从事多个项目,很难找到确切的来源...

如果您需要更多信息,请告诉我。感谢您的宝贵时间。

解决方案

我想我有一个 Nginx 设置可以让我的套接字与我忘记的 TLS 一起工作。如果你最终来到这里,你可能会遇到同样的情况。

您可以通过在您的控制台中执行 nginx -t 并在您的 IDE.

中打开文件(如果存在)来检查这一点
# /usr/local/etc/nginx/nginx.conf
...
server {
  listen   5212 ssl;
  server_name  localhost;
  ssl_certificate /Users/loschcode/Desktop/some-path/ssl/server.crt;
  ssl_certificate_key /Users/loschcode/Desktop/some-path/ssl/server.key;

  location / {
    rewrite ^(.*) https://localhost:5214 permanent;
  }
}
...

我最近更改了我用于处理项目的目录,这导致证书路径错误,因此我的问题。 修复路径使其工作