Работает ли Rails с Action Cable с прокси NGiNX перед Puma? - PullRequest
0 голосов
/ 23 мая 2019

Я знаю, что есть еще 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/5/2019

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

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

Но мне нравится верить, что я пропускаю хотя бы пару строк 'log' (например, как это показано в моем файле 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 "заткнулась" - и канал действительно работал, очевидно: $

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

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

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

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

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

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

Приветствия, Вальтер

0 голосов
/ 23 мая 2019

, если вы используете 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;
}

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

...