【问题标题】:ActionCable / Websocket not working with PumaActionCable / Websocket 不适用于 Puma
【发布时间】:2019-07-27 11:38:56
【问题描述】:

问题

在开发过程中,我的 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 中使用了一些拆分前端来监听 websocket。 您应该知道整个配置在几天前就可以正常工作。

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

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 之类的其他任何东西交互,这可能在我的计算机上发生了变化?我使用多种技术从事多个项目,很难找到确切的起源......

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

【问题讨论】:

  • 每个进程的日志说明了什么? puma 和 actioncable 都有吗?
  • 没有,它启动然后没有收到来自4001 的任何东西,因为没有进程在这个端口上运行。我试图打开一个rails/rails 问题,但他们关闭了它,因为它似乎太特定于上下文。
  • ../config/cable_environment 中有什么内容?如果您可以将 repo 推送到 github 或其他看起来非常具体的东西,它也可能会有所帮助。
  • 它与工作相关,所以我不能公开推送回购......该进程根本没有产生(没有错误,什么都没有)
  • @ZedTuX 我给你加的,我完全忘记了对不起

标签: ruby-on-rails ruby websocket puma actioncable


【解决方案1】:

解决办法

我想我有一个 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$1 permanent;
  }
}
...

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

【讨论】:

  • 谢谢!从那以后,我已经解决了我的问题(与 Nginx 配置无关),但还是谢谢你! ?
猜你喜欢
  • 2017-01-10
  • 2020-04-21
  • 2021-03-09
  • 2019-07-05
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
相关资源
最近更新 更多