8

मुझे अपने क्रोम ब्राउज़र में WebSocket connection to 'ws://{hostname}/cable' failed: WebSocket is closed before the connection is established. मिलता है जब मेरे रेल 5 + एक्शनकेबल ऐप से कनेक्ट होता है। मेरे स्थानीय विकास पर्यावरण में, ऐसा नहीं होता है। यह केवल मेरे स्टेजिंग और उत्पादन पर्यावरण में होता है।रेल 5 + एक्शनकेबल: 'ws: // {hostname}/केबल' के लिए वेबसॉकेट कनेक्शन विफल: कनेक्शन स्थापित होने से पहले वेबसॉकेट बंद है

Successful screenshot on development

Failed screenshot on staging

मैं अमेज़न ElasticBeanstalk का उपयोग अपने एप्लिकेशन को तैनात करने की। क्रोम डेवलपर टूल के साथ अनुरोधों की निगरानी के बाद, मुझे पता चला कि विकास पर्यावरण के विपरीत, स्टेजिंग में वेबसाकेट अनुरोध, उत्पादन पर्यावरण को प्रतिक्रिया नहीं मिलती है (लंबित) ताकि एक्शनकेबल लगातार वेबसॉकेट एंडपॉइंट से कनेक्ट करने का प्रयास कर सके (ws: // {hostname}/केबल)।

बात है, मेरी puma.log में, यह कहना है कुछ इस तरह:

I, [2016-07-26T13:45:53.921154 #32369] INFO -- : Registered connection (Z2lkOi8vYXNrLWNvLWRlL1VzZXIvMg) 
I, [2016-07-26T13:46:05.775788 #32369] INFO -- : Finished "/cable/" [WebSocket] for 121.166.105.106 at 2016-07-26 13:46:05 +0000 
I, [2016-07-26T13:46:18.074895 #32369] INFO -- : [917fd706-4f1a-4178-bd95-7a33c0c7b621] Started GET "/cable" for 121.166.105.106 at 2016-07-26 13:46:18 +0000 
I, [2016-07-26T13:46:18.075764 #32369] INFO -- : [917fd706-4f1a-4178-bd95-7a33c0c7b621] Started GET "/cable/" [WebSocket] for 121.166.105.106 at 2016-07-26 13:46:18 +0000 
I, [2016-07-26T13:46:18.075817 #32369] INFO -- : [917fd706-4f1a-4178-bd95-7a33c0c7b621] Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket) 

है कि, WebSocket में नवीनीकृत सफल रहा था लेकिन बाकी अज्ञात है। क्या आपको इसका समाधान करने पर कोई सुराग है?

+0

मैंने ऑटो स्केलिंग के बिना एक नया वातावरण बनाकर, लोचदार बीनस्टॉक से लोड संतुलन को हटाकर इस मुद्दे को हल किया। मुझे लगता है कि भार संतुलन के दौरान HTTP शीर्षलेख के बारे में कुछ समस्या थी। –

+0

मुझे एक ही समस्या है –

+0

क्या आप विस्तृत कर सकते हैं? क्या आप एडब्ल्यूएस पर हैं? –

उत्तर

0

जैसा कि प्रश्न के लेखक ने पहले से ही वेबसाईट कनेक्शन में इस विफलता के संभावित कारण पर टिप्पणी की थी, एक गलत कॉन्फ़िगर किए गए लोडबलैंसर के पीछे अनुरोध को फिर से लिखना था।

उदाहरण के लिए मैंने एक गलत कॉन्फ़िगर किया गया अपाचे सर्वर का सामना किया जहां रेलवे अनुप्रयोग के लिए http से ws पर प्रयुक्त प्रोटोकॉल को फिर से लिखने के लिए पुनर्लेखन नियम लागू किए गए थे।

यदि यह दूसरों की सहायता करता है तो यह काम कर रहे अपाचे VHost कॉन्फ़िगरेशन है जो उस मामले में websockets को सक्षम करता है।

<VirtualHost domain.of.the.rails-app:80> 
    ServerName domain.of.the.rails-app 
    DocumentRoot /var/www/apps/rails-app/public 
    ProxyPreserveHost On 
    ProxyPass /error-documents ! 
    ErrorDocument 503 /error-documents/503.html 
    Alias /error-documents /var/www/apps/rails-app/public 
    ProxyPass/http://0.0.0.0:3000/ 
    ProxyPassReverse/http://0.0.0.0:3000/ 
    RewriteEngine on 
    RewriteCond %{HTTP:UPGRADE} websocket [NC] 
    RewriteRule /(.*) ws://localhost:3000/$1 [P] 
</VirtualHost> 
संबंधित मुद्दे