Ich habe eine Rails 5 App, die Action Cable
für Websocket-Funktionalität verwendet.ActionCable funktioniert nicht mehr in der Produktionsumgebung
In meiner Entwicklungsumgebung funktioniert alles wie erwartet und die Browser-Clients verbinden sich erfolgreich mit den Action Cable
Kanälen.
In meiner Produktionsumgebung arbeitete Action Cable
irgendwann, aber dann hörte plötzlich auf zu funktionieren, ohne irgendeine unmittelbare Ursache.
Wenn ich die RAILS_ENV
zu production
während der Ausführung der App auf meinem Entwicklungscomputer Action Cable
funktioniert, funktioniert gut. Etwas scheint anders zu sein, wenn die App auf der tatsächlichen Produktionsmaschine ausgeführt wird, obwohl die grundlegende Umgebung dieselbe ist.
Der spezifische Fehler, den ich in der Chrome-Konsole sehen:
mydomain.com/:1 WebSocket connection to 'wss://mydomain.com/cable' failed: WebSocket is closed before the connection is established
. Ich bekomme einen ähnlichen Fehler in anderen Browsern, so dass es nicht Browser-bezogen erscheint. Ich habe alle Adblocker während des Tests deaktiviert, nur um sicher zu gehen, dass sie nicht stören.
Development.rb ENV relevantes Setup:
config.action_cable.url = "ws://localhost:#{port}/cable"
Production.rb ENV relevantes Setup:
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}"]
I Puma
als Webserver verwenden. Der Webserver bedient eine SSL-Verbindung, für die ein gültiges Zertifikat installiert ist. Auf der Produktionsmaschine bedient Puma die Applikation auf Port 3000
, wird aber im Router an Port 443
weitergeleitet.
Der einzige bemerkenswerte Unterschied mit dem Ausführen der App auf meinem Dev-Computer und Produktion ist, dass in der Produktion SSL verwendet wird.
Verwenden Sie AWS? – Shannon
@Shannon Nope, gehostet mit Docker-Container auf einem Synology NAS – edwardmp
Ich kann dieses Problem nicht aus Mangel an rep kommentieren; Was benutzt du, um das zu bedienen? Nginx? Apache? Die Tatsache, dass es lokal mit "production" arbeitet, weist auf ein Problem mit der Webserverkonfiguration hin. Welchen Docker-Container benutzen Sie? Welches Betriebssystem läuft auf Ihrem NAS? Brauche all diese Infos. – FanaHOVA