Ich habe kürzlich mein Rails-Projekt von Rails4 auf 5.0.0.beta3 umgestellt, um das tolle ActionCable zu verwenden.Wie konfiguriere ich ActionCable mit Nginx und Unicorn in der Produktion?
Mein ActionCable-Server wird im Unicorn ausgeführt. In der Entwicklung funktioniert alles gut. In der Produktion habe ich
Started GET "/cable" for xxx.xxx.xxx.xxx at 2016-03-28 18:06:38 +0300
Started GET "/cable/" [WebSocket] for xxx.xxx.xxx.xxx at 2016-03-28 18:06
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
Registered connection (189772ff-6229-48f1-ae7f-d9a96ad3a6c3)
Finished "/cable/" [WebSocket] for xxx.xxx.xxx.xxx at 2016-03-28 18:06:35
Und diese Botschaft wiederholt immer wieder in einer Schleife.
Ich habe eine Menge Optionen bei Stackoverflow ausprobiert, um damit umzugehen, aber nichts hilft. Meine nginx config:
upstream unicorn {
server unix:/tmp/unicorn.my_app.sock fail_timeout=0;
}
server {
server_name www.my_app.com;
return 301 $scheme://my_app.com$request_uri;
}
server {
listen 80 default deferred;
server_name my_app.com;
root /var/www/my_app/current/public;
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
try_files $uri/index.html $uri @unicorn;
location @unicorn {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://unicorn;
}
location /cable {
proxy_pass http://unicorn/cable;
proxy_http_version 1.1;
proxy_set_header Upgrade websocket;
proxy_set_header Connection Upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /500.html;
keepalive_timeout 5;
}
Um sicher zu sein, dass Anfrage Ich habe diesen Code vorübergehend erlaubt ist, in initializers verwenden: ActionCable.server.config.disable_request_forgery_protection = true
Meine cable.coffee
Datei
@App ||= {}
App.cable = ActionCable.createConsumer "/cable"
Meine config/cable.yml
Datei
production:
adapter: redis
url: redis://localhost:6379/1
Ich bin nicht so erfahren in dieser Frage, so jede Hilfe wäre toll.
Haben Sie 'mount ActionCable.server => '/ cable' in Ihren Routen? – siegy22
@yzalavin Konnten Sie das lösen? Ich sehe das gleiche Problem. –
@R_G Ich habe das gleiche Problem. Konntest du die Probleme finden? Von dem, was ich debugged habe, ist Unicorn nicht in der Lage, Ping zu den Clients zu senden und so versucht der Client, die Verbindung wiederherzustellen. Also die connect-Anweisungen in Schleife. Nicht sicher, warum der Fluss in der anderen Richtung nicht funktioniert – sethi