GCP事始め。Compute EngineでRailsアプリを動かす で作成したサーバーでAction Cable(WebSocket)が動くようにしたのでメモしておきます。
Rails側は実装済みの状態です。Action CableでWebSocketを試す
今回は導入済みのNginxを使用しました。記事書いてくれている人も多いので迷わないですが。
Nginxの設定追加
こちらを参考にしました。
ただ、proxy_passの所だけ、/cable付けると上手くいかなかったので変更しています。
How to configure ActionCable with Nginx and Unicorn in production? – Stack Overflow
サーバーの/etc/nginx/conf.d/z_front.conf
※私の場合は、/etc/nginx/nginx.confからincludeしているので、このファイル。
# Action Cable access location /cable { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade websocket; proxy_set_header Connection Upgrade; proxy_pass http://rails-app-origin; }
Redis追加
サーバーへのRedisインストールはAnsible使っているの割愛。
Gemfile
# Use Redis(Use Action Cable) gem 'redis', :group => :production
% bundle install
config/cable.yml は変更せずそのまま使用
development: adapter: async test: adapter: test production: adapter: redis url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %> channel_prefix: rails_app_origin_production
config/application.rb(Action Cable実装時に設定済み)
# Action Cable config.action_cable.mount_path = '/cable' config.action_cable.url = "#{Settings['websocket_url']}#{config.action_cable.mount_path}" config.action_cable.allowed_request_origins = Settings['websocket_allowed']
今回のコミット内容。
Nginxの設定もAnsibleで行っています。
https://dev.azure.com/nightonly/vagrant-ansible-origin/_git/vagrant-ansible-centos7/commit/3df783b9a18016692e20252ac68b83df5b55e35f