Подтвердить что ты не робот

Rails 5 Action Cable развертывание с Nginx, Puma и Redis

Я пытаюсь развернуть приложение Action Cable -enabled на VPS, используя Capistrano. Я использую Puma, Nginx и Redis (для кабеля). После пары препятствий я смог заставить его работать в местной среде разработки. Я использую URL-адрес по умолчанию для процесса/кабеля. Но, когда я пытаюсь развернуть его на VPS, я продолжаю получать эти две ошибки в JS-log:

Establishing connection to host ws://{server-ip}/cable failed.
Connection to host ws://{server-ip}/cable was interrupted while loading the page.

И в моем приложении nginx.error.log я получаю следующие сообщения:

2016/03/10 16:40:34 [info] 14473#0: *22 client 90.27.197.34 closed keepalive connection

Включение ActionCable.startDebugging() в JS-приглашении не представляет интереса. Просто ConnectionMonitor пытается повторно открыть соединение на неопределенный срок. Я также получаю нагрузку 301: постоянно переводится -requests для /cable в моем сетевом мониторе.

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

  • Использование адаптера async вместо Redis. (Это то, что используется в разработке env)
  • Добавьте что-то вроде этого к моему /etc/nginx/sites-enabled/{app-name}:

    location /cable/ {
      proxy_pass http://puma;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "Upgrade";
    }
    
  • Настройка Rails.application.config.action_cable.allowed_request_origins на правильный хост (проверено "http://{server-ip}" и "ws://{server-ip}" )

  • Включение Rails.application.config.action_cable.disable_request_forgery_protection

Не повезло. Что вызывает проблему?

$ rails -v
Rails 5.0.0.beta3

Пожалуйста, сообщите мне о любых дополнительных деталях, которые могут быть полезны.

4b9b3361

Ответ 1

Наконец, я заработает! Я пробовал разные вещи около недели...

301-перенаправление было вызвано тем, что nginx на самом деле пытается перенаправить браузер на/cable/вместо/cable. Это потому, что я указал/кабель/вместо/cable в строфе location! Я получил идею этого ответа.