मैं इन लॉग संदेशोंकार्रवाई केबल (WebSocket में नवीनीकृत करने में विफल) कनेक्ट करने में असमर्थ
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
मैं एक छोटे से debuggged के साथ गैर विकास के वातावरण में WebSocket से कनेक्ट करने में एक मुद्दा हो रहा है और अनुरोध भेजा पता लगा ब्राउज़र/जावास्क्रिप्ट द्वारा यूनिकॉर्न (nginx के साथ चल रहे) द्वारा प्राप्त अनुरोध के समान नहीं है।
ब्राउज़र द्वारा अनुरोध हेडर
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
यहां कनेक्शन 'अपग्रेड' लेकिन WebSocket अनुरोध कनेक्शन 'बंद' है (शायद nginx यह खिलवाड़ कर रहा है ऊपर?) है
और यह है WebSocket ड्राइवर में कोड का टुकड़ा विफल हो रहा है
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
अपडेट
यह मेरा nginx विन्यास
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;
}
मैं/केबल
mount ActionCable.server => "/cable"
nginx परिवर्तनों के साथ
मैं सफलतापूर्वक हाथ मिलाना है करने में सक्षम हूँ लेकिन सर्वर दिल भेजने में सक्षम नहीं है पर actioncable सर्वर घुड़सवार है धड़कता है और कनेक्शन गिरता रहता है।
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)
आप Nginx का कौन सा संस्करण चल रहे हैं? मुझे लगता है कि वेबसाकेट 1.3 के बाद से समर्थित हैं। क्या आपने https://www.nginx.com/blog/websocket-nginx/ सुझावों के रूप में 'अपग्रेड' और' कनेक्शन 'शीर्षलेख सेट किए हैं? –
अद्यतन प्रश्न !! @JuliuszGonera – sethi
यह मेरे लिए Nginx 1.7.12 के साथ काम करता है: https://gist.github.com/jgonera/91aa8c1f4e38bf0169ccc3adc00be90c –