Я знаю, что есть еще 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 есть демонстрационный проект, если вы готовы к некоторой отладке, но доброе слово, мокрое платок на лоб или полное молчание - я не привередлив ;)
Мой 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 "заткнулась" - и канал действительно работал, очевидно :$
если вы используете 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;
}
Это проверено и работает отлично :-)
Я провел почти 40 часов, облаивая почти каждое второе «дерево в городе» :)
(Короткий) ответ на этот вопрос: да!
(Несколько) более длинный ответ: будьте очень осторожны, чтобы иметь полный контроль над своим оборудованием и/или виртуальной машиной (в моем примере я ковылял со старым дистрибутивом Debian, исправленным миллион раз всевозможными вещами, работающими почти 10 других приложений, каждое со своим набором «специальных предложений»!
Мой совет: возьмите с собой свежую коробку для первого выстрела — когда вы разберетесь в технологии и тонкостях и почувствуете себя авантюристом, ищите старый дистрибутив Slackware из 98-го года и вложите его в свое удовольствие :)
(Очень длинный) ответ: клонировать https://github.com/wdiechmann/sucker.git для некоторого исходного шины
Ваше здоровье, Вальтер
да - ну - люди постоянно говорят мне об этом ;) (если вы посмотрите на проект-лох - это то, что я настроил - и прямо сейчас я даже попытался удалить последний комментарий слева от
proxy_set_header X-Forwarded-For...
- увы, безрезультатно