8

Tôi nhận được WebSocket connection to 'ws://{hostname}/cable' failed: WebSocket is closed before the connection is established. trong trình duyệt Chrome khi kết nối với ứng dụng Rails 5 + ActionCable. Trong môi trường phát triển địa phương của tôi, nó không xảy ra. Nó chỉ xảy ra trong môi trường sản xuất và dàn dựng của tôi.Rails5 + ActionCable: Kết nối WebSocket với 'ws: // {hostname}/cable' không thành công: WebSocket bị đóng trước khi kết nối được thiết lập

Successful screenshot on development

Failed screenshot on staging

tôi sử dụng Amazon ElasticBeanstalk để triển khai ứng dụng của tôi. Sau khi giám sát các yêu cầu với công cụ phát triển chrome, tôi đã tìm ra rằng không giống như môi trường phát triển, yêu cầu WebSocket trong dàn dựng, môi trường sản xuất không nhận được phản hồi (đang chờ xử lý) để ActionCable liên tục cố gắng kết nối với điểm cuối WebSocket (ws: // {hostname}/cáp).

Có điều là, trong puma.log của tôi, nó nói cái gì đó như thế này:

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) 

có nghĩa là, nâng cấp lên WebSocket đã thành công nhưng phần còn lại là không rõ. Bạn có bất kỳ đầu mối nào để giải quyết vấn đề này không?

+0

Tôi giải quyết vấn đề này bằng cách loại bỏ cân bằng tải từ Cây đậu đàn hồi, tức là, bằng cách tạo môi trường mới mà không tự động mở rộng quy mô. Tôi đoán có một số vấn đề liên quan đến tiêu đề HTTP trong khi cân bằng tải. –

+0

Tôi gặp vấn đề tương tự –

+0

bạn có thể xây dựng không? bạn có trên AWS không? –

Trả lời

0

Là tác giả của câu hỏi đã nhận xét nguyên nhân có thể xảy ra do lỗi này trong kết nối websocket là do yêu cầu được viết lại sau khi Loadbalancer bị định cấu hình sai.

Ví dụ: tôi gặp phải một máy chủ Apache được cấu hình sai, trong đó các quy tắc viết lại đã được áp dụng để viết lại giao thức đã sử dụng từ http đến ws cho một ứng dụng đường ray.

Trong trường hợp nó giúp người khác ở đây là cấu hình Apache VHost hoạt động đã bật websockets trong trường hợp đó.

<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> 
Các vấn đề liên quan