#概要
本日、本番環境をHerokuからAWSに移行後、ブラウザ上で動作を確認したら、コメント機能の非同期通信で実装した所がうまく動作をしなかったので解決策をシェアしたいと思います。
#起きていたこと
Herokuでのデプロイ時とAWSでのデプロイ時でのproduction.rbの記述方法が異なる。
###Herokuでの場合
production.rb
ActionCable.server.config.disable_request_forgery_protection = true
config.action_cable.url = "wss://【Herokuアプリ名】.herokuapp.com/cable"
config.action_cable.allowed_request_origins = ['https://【Herokuアプリ名】.herokuapp.com', 'http://【Herokuアプリ名】.herokuapp.com'
###AWSでの場合
production.rb
ActionCable.server.config.disable_request_forgery_protection = true
config.action_cable.url = "ws://【Elastic IP】/cable"
config.action_cable.allowed_request_origins = ['http://【Elastic IP】']
##上記に加えてAWSの場合必要な対応
/etc/nginx/conf.d/rails.conf
upstream app_server {
server unix:/var/www/アプリケーション名/shared/tmp/sockets/unicorn.sock;
}
server {
listen 80;
server_name Elastic IP;
root /var/www/アプリケーション名/current/public;
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
root /var/www/アプリケーション名/current/public;
}
try_files $uri/index.html $uri @unicorn;
location @unicorn {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
# -------------------ここから-------------------
# /cableのパスに対してwebsocketの仕組みを用いるための設定
location /cable {
proxy_pass http://app_server/cable;
proxy_http_version 1.1;
proxy_set_header Upgrade websocket;
proxy_set_header Connection Upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# -------------------ここまでを追記-------------------
error_page 500 502 503 504 /500.html;
#まとめ
今回の件ではAWSの場合だとWebサーバーとしてNginxを用意していたので、ActionCableを用いる場合、サーバーサイドへのリクエストを受け取る役目のあるWebサーバーにて、websocketの仕組みを用いるための設定をする必要があることを認識することが出来ました。