2014-04-29 14 views
6

Ho un'applicazione Rails 3.2 con gems websocket-rails 0.7.Websocket-rails non funziona su ambiente di produzione con Nginx e Unicorn

Sulla macchina di sviluppo, tutti funzionano bene

In ambiente di produzione, uso Nginx/1.6 come server proxy e Unicorn come server HTTP. Thin è usato in modalità standalone (dopo 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"; 
} 

Sul lato back-end, ho il seguente codice per la notifica di invio ai clienti

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

Sul lato client, ho ottenuto una connessione utilizzando:

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

Ma la notifica non arriva al cliente.

problema correlati su github - github.com/websocket-rails/websocket-rails/issues/211

+0

hai mai risolvere il problema? – jay

+0

@jay Sono stato in grado di risolvere questo problema attraverso l'uso di thin come server http generico, senza unicorno. Ma per unicorn + thin (per websocket) + nginx non ho trovato una soluzione – MaxKonin

+0

su quale porta hai avviato Nginx? Il tuo codice client sta chiamando 3001, ma poi stai inoltrando a 3001. Nginx e Thin non possono aver entrambi servito 3001 sullo stesso server. – toxaq

risposta

5

tuo nginx config è corrispondenza delle richieste di sotto /websocket/ con la finale /. Questo è il componente directory di /websocket/blah.

Se si guarda nel file di log di accesso nginx troverete le vostre richieste per /websocket vengono reindirizzate a 301 /websocket/.

Rimuovere il trailing /

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

L'ho provato. Non mi ha aiutato ... – MaxKonin

+0

Cosa viene registrato nei log di nginx e thin access quando arriva la richiesta? – Matt

+0

Puoi vedere tutte le informazioni in https://github.com/websocket-rails/websocket-rails/issues/211 – MaxKonin

Problemi correlati