Chúng tôi đang cố gắng triển khai ví dụ trò chuyện Rails 5 đơn giản của DHH thành một cá thể EC2 duy nhất, tự chứa trên AWS. Mã có sẵn ở đây: https://github.com/HectorPerez/chat-in-rails5ActionCable on AWS: Lỗi trong quá trình bắt tay WebSocket: Mã phản hồi không mong muốn: 404
Chúng tôi sử dụng đàn hồi Beanstalk để quay về một trường hợp duy nhất như sau:
eb create dev-env -p “64bit Amazon Linux 2015.09 v2.0.4 running Ruby
2.2 (Puma)” –single -i t2.micro --envvars
SECRET_KEY_BASE=g5dh9cg614a37d4bdece9126b42d50d0ab8b2fc785daa1e0dac0383d6387f36b
Đây là cài đặt tối thiểu, vì vậy không có Elasticache, và không cân bằng tải. Để cài đặt redis trên phiên bản EC2, chúng tôi đã thêm tệp cấu hình .ebextensions như sau: https://gist.github.com/KeithP/08b38189372b7fd241e5#file-ebextensions-redis-config; Git cam kết và triển khai.
Nhưng công việc WebSocket doesnt: Kiểm tra trình duyệt giao diện điều khiển, chúng ta thấy lỗi này lặp đi lặp lại nhiều lần:
application-a57354de3399cd895ca366df9bd7316ab69e81d266b63be7d7be563ebc78ab9d.js:27
WebSocket connection to ‘ws://dev-env-y2e5dcrxqk.elasticbeanstalk.com/cable’ failed:
Error during WebSocket handshake: Unexpected response code: 404
Các production.log máy chủ cho thấy 2 "Bắt đầu GET/cáp" cho mọi cuộc gọi "Hoàn thành/cáp". Không có tin nhắn DEBUG từ ActiveCable:
/var/app/containerfiles/logs/production.log
-------------------------------------
INFO -- : Processing by RoomsController#show as HTML
DEBUG -- : [1m[36mMessage Load (0.1ms)[0m [1m[34mSELECT "messages".* FROM "messages"[0m INFO -- : Rendered collection (0.0ms)
INFO -- : Rendered rooms/show.html.erb within layouts/application (0.5ms)
INFO -- : Completed 200 OK in 2ms (Views: 1.2ms | ActiveRecord: 0.1ms)
INFO -- : Started GET "/cable" for <ip_address> at 2016-01-01 17:28:26 +0000
INFO -- : Started GET "/cable/" for <ip_address> at 2016-01-01 17:28:26 +0000
INFO -- : Finished "/cable/" for <ip_address> at 2016-01-01 17:28:26 +0000
Chúng tôi đã kiểm tra rằng redis dường như đã cài đặt và bắt đầu ok; và đã thử 'ActionCable.server.config.disable_request_forgery_protection = true' trong production.rb – KeithP
Bạn đang sử dụng proxy ngược lại như nginx hay kết nối trực tiếp với ứng dụng đường ray chạy trên cổng 80? – tpbowden
Đã thử có và không có cấu hình proxy ngược này: https://gist.github.com/KeithP/f8534c04d20c2b4e4b1d – KeithP