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,所以我尝试了很多东西
- 我尝试了很多很多方法来更改配置,但我在这里粘贴了原始配置。基本上 运行 整个文档多次并尝试了我能想到的所有组合
- 我试过更改端口或端点
- 我更改了自托管(和工作)的 SSL 证书并生成了新证书,它似乎与问题无关
- 我尝试降级 Puma,但没有任何改变。
- 我已经尝试将项目完全重新安装到一个新目录中,但它仍然不起作用。
- 我也通过 RVM 重新安装了多次 Ruby 并尝试了几个版本,但没有成功。
- 我什至不顾一切地把我的电脑升级到 MacOS Mojave,一点问题都没有解决。
我不知道的事
我对通过 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;
}
}
...
我最近更改了我用于处理项目的目录,这导致证书路径错误,因此我的问题。 修复路径使其工作。
问题
在开发过程中,我在我的 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,所以我尝试了很多东西
- 我尝试了很多很多方法来更改配置,但我在这里粘贴了原始配置。基本上 运行 整个文档多次并尝试了我能想到的所有组合
- 我试过更改端口或端点
- 我更改了自托管(和工作)的 SSL 证书并生成了新证书,它似乎与问题无关
- 我尝试降级 Puma,但没有任何改变。
- 我已经尝试将项目完全重新安装到一个新目录中,但它仍然不起作用。
- 我也通过 RVM 重新安装了多次 Ruby 并尝试了几个版本,但没有成功。
- 我什至不顾一切地把我的电脑升级到 MacOS Mojave,一点问题都没有解决。
我不知道的事
我对通过 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;
}
}
...
我最近更改了我用于处理项目的目录,这导致证书路径错误,因此我的问题。 修复路径使其工作。