ich ein Problem habe bei der Verbindung in nicht-Entwicklungsumgebungen mit diesen Log-MeldungenAktion Kabel nicht in der Lage (Fehler beim WebSocket Upgrade) zu verbinden
Failed to upgrade to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: close, HTTP_UPGRADE:)
Finished "/cable/"[non-WebSocket] for 127.0.0.1 at 2016-07-06 09:44:29 +1000
ich ein wenig debuggged WebSocket und rechneten die Anfrage aussandte durch den Browser/Javascript ist nicht genau das gleiche wie die Anfrage von Einhorn (mit nginx läuft).
Der Request-Header vom Browser ist
GET ws://cc-uat.com.au/cable HTTP/1.1
Host: cc-uat.com.au
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://cc-uat.com.au
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Cookie: <Lot of cookies>
Sec-WebSocket-Key: QGdJkYIA2u7vtmMVXfHKtQ==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Protocol: actioncable-v1-json, actioncable-unsupported
Die Verbindung ist hier 'Upgrade' aber die websocket Anfrage hat die Verbindung 'geschlossen' (wahrscheinlich nginx ist es vermasselt?)
Und das Stück Code in websocket Fahrer versagt
def self.websocket?(env)
connection = env['HTTP_CONNECTION'] || ''
upgrade = env['HTTP_UPGRADE'] || ''
env['REQUEST_METHOD'] == 'GET' and
connection.downcase.split(/ *, */).include?('upgrade') and
upgrade.downcase == 'websocket'
end
Updates
Das ist meine nginx Konfiguration
upstream app {
server unix:/home/osboxes/sites/actioncable-examples/shared/sockets/unicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name localhost;
root /home/osboxes/sites/actioncable-example/public;
try_files $uri/index.html $uri @app;
location @app {
proxy_pass http://app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}
I actioncable Server auf/Kabel
mount ActionCable.server => "/cable"
Mit den nginx Änderungen angebracht habe ich in der Lage bin erfolgreich den Handshake haben, aber der Server ist nicht in der Lage, das Herz zu senden Beats und die Verbindung sinkt weiter.
Started GET "/cable" for 127.0.0.1 at 2016-07-07 05:48:06 +0100
Started GET "/cable/" [WebSocket] for 127.0.0.1 at 2016-07-07 05:48:06 +0100
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: upgrade, HTTP_UPGRADE: websocket)
In welcher Version von Nginx laufen Sie? Ich denke WebSockets werden seit 1.3 unterstützt. Haben Sie "Upgrade" und "Connection" Header als https://www.nginx.com/blog/websocket-nginx/ vorgeschlagen? –
aktualisierte Frage !! @JuliuszGonera – sethi
Dies funktioniert für mich mit Nginx 1.7.12: https://gist.github.com/jgonera/91aa8c1f4e38bf0169ccc3adc00be90c –