我有一個Rails 5應用程序,它使用Action Cable
作爲websocket功能。ActionCable不再在生產環境中工作
在我的開發環境中,一切都按預期工作,瀏覽器客戶端成功連接到Action Cable
頻道。
在我的生產環境Action Cable
正在某個時間點工作,但之後突然停止運行,沒有任何明顯的原因。
如果我在開發計算機上運行應用程序Action Cable
時將RAILS_ENV
更改爲production
工作正常。在實際生產機器上運行應用程序時,情況似乎有所不同,但基本環境相同。
特定的錯誤我在Chrome控制檯中看到:
mydomain.com/:1 WebSocket connection to 'wss://mydomain.com/cable' failed: WebSocket is closed before the connection is established
。我在其他瀏覽器中看到類似的錯誤,所以它似乎不是瀏覽器相關的。我在測試時禁用了任何adblockers,以確保它們不會發生干擾。
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上使用Docker容器託管 – edwardmp
由於缺乏代表,我無法對此問題發表評論;你用什麼來服務這個? Nginx的? Apache的?它在本地設置「production」的事實表明Web服務器配置存在問題。你運行什麼Docker容器?您的NAS上運行什麼操作系統?需要所有這些信息。 – FanaHOVA