ActionCable / Websocket не работает с Puma - PullRequest
2 голосов
/ 06 марта 2019

Проблема

В процессе разработки я разделяю процессы между моим сервером 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 для прослушивания веб-сокетов. Вы должны знать, что вся эта конфигурация работала раньше, чем несколько дней назад.

Когда я пытаюсь прослушать сокеты из внешнего интерфейса, он делает это

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

Я заметил, что ни один процесс не работает вообще , и я не знаю, как устранить эту проблему.Поскольку сервер веб-сокетов, кажется, является стажером в ActionCable, я действительно не знаю, как искать, что происходит сбой, ошибки не отображаются, пума запущена, но веб-сокеты нет.

Что я пробовал

Я не могу вспомнить точно, что я сделал за последние несколько дней, которые могли сломать веб-сокеты, поэтому я попробовал много вещей

  • Я пытался изменить конфигурацию вмного, много способов, но я вставил оригинал здесь.В основном запускал всю документацию несколько раз и пробовал все комбинации, которые я мог придумать
  • Я пытался изменить порт или конечную точку
  • Я изменил сертификаты SSL, которые размещаются самостоятельно (иработает) и выпустил новые, похоже, это не связано с проблемой
  • Я пытался понизить версию Puma, но это ничего не изменило.
  • Я пыталсяпереустановите проект полностью в новом каталоге, но он все еще не работает.
  • Я также несколько раз переустанавливал Ruby через RVM и пробовал несколько версий, но безуспешно.
  • Я даже закончилдо обновления моего компьютера до MacOS Mojave в отчаянном движении, не сдвинул проблему с места.

Чего я не знаю

Я ничего не знаю омеханизм порождения веб-сокетов через ActionCable.Почему нет ошибки?Как это работает ?Я что-то упустил в своей конфигурации?Взаимодействует ли это с чем-то еще, например, с NPM / Node / Apollo, которые могли бы измениться на моем компьютере?Я работаю над несколькими проектами с несколькими технологиями, довольно сложно найти точное происхождение ...

Если вам нужна дополнительная информация, просто дайте мне знать.Спасибо за ваше время.

1 Ответ

0 голосов
/ 05 июня 2019

Решение

Я подумал, что у меня есть настройка 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;
  }
}
...

Недавно я изменил каталог, который использовал для работы над проектом, и поэтому указал неверный путь к сертификату. Исправление пути заставило его работать .

...