2014-04-29 9 views
6

Ich habe Rails 3.2 Anwendung mit Edelstein Websocket-Schienen 0,7.Websocket-Schienen funktioniert nicht auf Produktionsumgebung mit Nginx und Unicorn

Auf Entwicklungsmaschine, die alle gut funktionieren

auf Produktionsumgebung, verwende ich Nginx/1.6 als Proxy-Server und Unicorn als HTTP-Server. Thin wird im Standalone-Modus verwendet (nach https://github.com/websocket-rails/websocket-rails/wiki/Standalone-Server-Mode).

nginx config:

location /websocket { 
    proxy_pass http://localhost:3001/websocket; 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 
} 

Auf Backend-Seite habe ich den folgenden Code für Sende Benachrichtigung an Kunden

WebsocketRails[:callback_requests].trigger 'new', call_request 

Auf Client-Seite, bekam ich eine Verbindung mit:

dispatcher = new WebSocketRails window.location.host + ':3001/websocket' 
channel = dispatcher.subscribe 'callback_requests' 

Aber die Benachrichtigung kommt nicht zum Client.

Verwandte Ausgabe auf Github - github.com/websocket-rails/websocket-rails/issues/211

+0

haben Sie jemals dieses Problem beheben? – jay

+0

@jay Ich konnte dieses Problem durch die Verwendung von Thin als allgemeine http-Server, ohne Einhorn zu lösen. Aber für Einhorn + Thin (für Websocket) + nginx habe ich keine Lösung gefunden – MaxKonin

+0

An welchem ​​Port hast du Nginx an? Ihr Client-Code ruft 3001 auf, aber Sie leiten auch an 3001 weiter. Nginx und Thin können nicht beide auf demselben Server 3001 bereitgestellt haben. – toxaq

Antwort

5

Ihre nginx config passende Anfragen unter /websocket/ mit der / Hinter. Das ist die Verzeichniskomponente von /websocket/blah.

Wenn Sie in Ihrer nginx Zugriffsprotokolldatei nachsehen, werden Ihre Anfragen an /websocket 301 weitergeleitet an /websocket/.

entfernen die hintere /

location /websocket { 
    proxy_pass http://localhost:3001/websocket; 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 
} 
+0

Ich habe es versucht. Es hat mir nicht geholfen ... – MaxKonin

+0

Was wird in den Nginx und Thin Access Logs protokolliert, wenn die Anfrage kommt? – Matt

+0

Sie können alle Informationen in https://github.com/websocket-rails/websocket-rails/issues/211 – MaxKonin