У меня есть приложение Rails 5, которое использует Action Cable
для функциональности websocket.ActionCable больше не работает в рабочей среде
В моей среде разработки все работает так, как ожидалось, и клиенты браузера успешно подключаются к каналам Action Cable
.
В моей производственной среде Action Cable
работал в какой-то момент, но затем внезапно прекратил функционировать без какой-либо непосредственной очевидной причины.
Если я меняю RAILS_ENV
на production
при запуске приложения на моей машине разработки Action Cable
работает нормально. Что-то кажется другим при запуске приложения на реальной производственной машине, хотя базовая среда такая же.
Специфическая ошибка я вижу в консоли Chrome:
mydomain.com/:1 WebSocket connection to 'wss://mydomain.com/cable' failed: WebSocket is closed before the connection is established
. Я получаю аналогичную ошибку в других браузерах, поэтому она не связана с браузером. Я отключил рекламодателей во время тестирования, чтобы убедиться, что они не мешают.
Development.rb ENV связанные установки:
config.action_cable.url = "ws://localhost:#{port}/cable"
production.rb ENV связанные установки:
hostname = ENV.fetch('HOSTNAME')
port = ENV.fetch('PORT')
base_url = "#{hostname}:#{port}"
config.action_cable.url = "wss://#{hostname}/cable"
config.action_cable.allowed_request_origins = ["https://#{base_url}", "https://#{hostname}"]
Я использую Puma
как веб-сервер. Веб-сервер обслуживает SSL-соединение, для которого установлен действительный сертификат. На производственной машине Puma обслуживает приложение на порту 3000
, но оно направляется в порт 443
в маршрутизаторе.
Единственная заметная разница с запуском приложения на моей машине и производственной машине - это то, что в производстве используется SSL.
Вы используете AWS? – Shannon
@Shannon Nope, размещаемый с использованием контейнеров докеров на Synology NAS – edwardmp
Я не могу комментировать эту проблему из-за отсутствия rep; что вы используете для этого? Nginx? Apache? Тот факт, что он работает с установкой 'production' локально, указывает на проблему с конфигурацией веб-сервера. Какой контейнер Docker вы используете? Какая ОС работает на вашем NAS? Нужна вся эта информация. – FanaHOVA