0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rails5 + ActionCableをGAEにデプロイできなかったのでGKEにした

Posted at

ActionCable is 何?

WebSocketを使ったリアルタイム処理をRails wayでお手頃に使えるフレームワーク

Google App Engine is not supported WebSocket!!

便利になったActionCableをGAEをにサクっとデプロイして本番稼働しようとおもったらGAEはWebSocket非対応のためActionCableが利用できません。

サポート対象外の機能
次に示す機能は、App Engine フレキシブル環境ではサポートされません。
バックエンド サービスへの HTTP/2 トラフィック
WebSocket
インスタンスに直接アクセスする HTTP リクエスト
https://cloud.google.com/appengine/docs/flexible/ruby/how-requests-are-handled

Google Cloud PlatformでActionCableを利用するには?

HTTP(S)ロードバランサはWebSocketリクエストを自動的にアップグレードしてくれるため、バックエンドにGCEかGKEをデプロイしておけば対応することができます。

HTTP(S) ロードバランサが HTTP(S) クライアントからの WebSocket アップグレード リクエストを認識し、バックエンド インスタンスからアップグレード成功のレスポンスが返されると、現在の接続期間中、ロードバランサが両方向のトラフィックのプロキシとして機能します。バックエンドからアップグレード成功のレスポンスが返されないと、ロードバランサが接続を終了します。
https://cloud.google.com/compute/docs/load-balancing/http/?hl=ja

ロードバランサを使わずに自前でnginxを立てても可

こうやればできるけど素直にHTTP(S)ロードバランサ使ったほうが楽ですね。

server {
  location /cable {
    proxy_pass http://0.0.0.0:3000/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;
  }
}

Rails + ActionCableのGCPでの最小構成図

Rails+ActionCable.png

ActionCableはredis(or postgresql)が必要なのでもう1台GCEが必要になります。

はやくGAEでもActionCableが利用できるようになりますように!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?