Работает ли Rails с Action Cable с проксированием NGiNX перед Puma?

Я знаю, что есть еще 1-2 вопроса по этой теме, но ни один из них, похоже, не охватывает мою точку зрения и не предлагает решения;

Консоль моего браузера говорит:

WebSocket connection to 'wss://sucker.alco.dk/cable' failed: WebSocket is closed before the connection is established.

Я бы легко согласился на это, если бы только «кабель» вообще работал :( Работа в разработке заставила меня бежать в банк, но, увы, в производстве все не так блестяще, боюсь :(

Мой Ruby довольно старый — 2.1.2p95 — мой Rails несколько новее:

# Gemfile
gem 'rails', '~> 5.1.6', '>= 5.1.6.2'
gem 'mysql2', '>= 0.4.4', '< 0.6.0'
gem 'puma', '~> 3.7'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.2'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.5'
gem 'redis', '~> 4.0'

Я добавил проблему на github.com/puma/puma, но, как отмечают другие участники этого сообщества, они работают почти точно такие же настройки - с успехом - так что они любезно указывают пальцем на Rails; я в основном думаю что я упустил какую-то глупую деталь :$

На github.com/wdiechmann/sucker есть демонстрационный проект, если вы готовы к некоторой отладке, но доброе слово, мокрое платок на лоб или полное молчание - я не привередлив ;)

РЕДАКТИРОВАТЬ 24.05.2019

Мой production.log никак не выглядит "запуганным" - все Является

I, [2019-05-24T07:19:01.182723 #21335]  INFO -- : [9855de1f-65b0-41d5-bdd1-726dad5a875e] Started GET "/cable" for 92.246.28.33 at 2019-05-24 07:19:01 +0200
I, [2019-05-24T07:19:01.183340 #21335]  INFO -- : [9855de1f-65b0-41d5-bdd1-726dad5a875e] Started GET "/cable/" [WebSocket] for 92.246.28.33 at 2019-05-24 07:19:01 +0200
I, [2019-05-24T07:19:01.183425 #21335]  INFO -- : [9855de1f-65b0-41d5-bdd1-726dad5a875e] Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: upgrade, HTTP_UPGRADE: websocket)
I, [2019-05-24T07:19:11.398314 #21335]  INFO -- : Finished "/cable/" [WebSocket] for 92.246.28.33 at 2019-05-24 07:19:11 +0200
I, [2019-05-24T07:19:12.545945 #21335]  INFO -- : [6d9a5967-57c7-45bf-b99e-2f3d74ba72f6] Started GET "/cable" for 92.246.28.33 at 2019-05-24 07:19:12 +0200
I, [2019-05-24T07:19:12.546559 #21335]  INFO -- : [6d9a5967-57c7-45bf-b99e-2f3d74ba72f6] Started GET "/cable/" [WebSocket] for 92.246.28.33 at 2019-05-24 07:19:12 +0200
I, [2019-05-24T07:19:12.546677 #21335]  INFO -- : [6d9a5967-57c7-45bf-b99e-2f3d74ba72f6] Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: upgrade, HTTP_UPGRADE: websocket)
I, [2019-05-24T07:19:22.914389 #21335]  INFO -- : Finished "/cable/" [WebSocket] for 92.246.28.33 at 2019-05-24 07:19:22 +0200

Но мне нравится верить, что я пропустил хотя бы пару строк «журнала» (например, как это показано в моем development.log)

Started GET "/cable" for ::1 at 2019-05-24 07:39:47 +0200
Started GET "/cable/" [WebSocket] for ::1 at 2019-05-24 07:39:47 +0200
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
MessageChannel is transmitting the subscription confirmation
MessageChannel is streaming from message_channel

- и я бы очень хотел, чтобы моя консоль DevTools "заткнулась" - и канал действительно работал, очевидно :$

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
31
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

если вы используете https, добавьте следующее в конфигурацию вашего сайта nginx:

location /cable {
  proxy_pass http://app;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "Upgrade";
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-Proto https;
  proxy_redirect off;
}

Это проверено и работает отлично :-)

да - ну - люди постоянно говорят мне об этом ;) (если вы посмотрите на проект-лох - это то, что я настроил - и прямо сейчас я даже попытался удалить последний комментарий слева от proxy_set_header X-Forwarded-For... - увы, безрезультатно

walt_die 23.05.2019 23:48
Ответ принят как подходящий

Я провел почти 40 часов, облаивая почти каждое второе «дерево в городе» :)

(Короткий) ответ на этот вопрос: да!

(Несколько) более длинный ответ: будьте очень осторожны, чтобы иметь полный контроль над своим оборудованием и/или виртуальной машиной (в моем примере я ковылял со старым дистрибутивом Debian, исправленным миллион раз всевозможными вещами, работающими почти 10 других приложений, каждое со своим набором «специальных предложений»!

Мой совет: возьмите с собой свежую коробку для первого выстрела — когда вы разберетесь в технологии и тонкостях и почувствуете себя авантюристом, ищите старый дистрибутив Slackware из 98-го года и вложите его в свое удовольствие :)

(Очень длинный) ответ: клонировать https://github.com/wdiechmann/sucker.git для некоторого исходного шины

Ваше здоровье, Вальтер

Другие вопросы по теме