Help us understand the problem. What is going on with this article?

PumaをSingleモードで起動してRailsと共存する

More than 3 years have passed since last update.

さて、Rails5でのwebsocketはRailsのgem内に組み込まれているので、特になにもする必要はないのですが、今回はRailsはApachePassengerで動いているので、
Pumaはスタンドアロンで別ポートで起動してもらう事にします。

前回のコードに多少の修正を加えます。

  1. 通常のウェブサイト: Apache +Passenger
  2. WebSocket: Puma

こういう組み合わせで行きたいと思います。
EC2内にデプロイします。

1. 事前準備

1) Redisがサーバーで立ち上がって動いている事が前提なのでインストールして設定します。
2) 現在Railsが動いているリポジトリをPULLしてきます。

2. Puma設定

ポートを 28080 にします。
FWの設定で外部からの受付設定を忘れないようにしましょう。
今回はELBとセキュリティグループに28080へのアクセスを許可します。

config/puma.rb
port        ENV.fetch("PORT") { 28080 }

ipconfigで確認するとeth0に172.31.10.197が設定されていてどうやらAWS内部ネットワークではこちらを利用しているみたいなので、このインターフェイスにバインドする形で起動します。

bundle exec puma cable/config.ru -b tcp://172.31.10.197:28080/cable&

正常に疎通ができていれば、
http://サーバー:28080/
でブラウザからアクセスした場合に、「Page not found」と表示されます。

3. dbのmigration

railsを再起動するとエラーがでるので対応します。
そういえば、追加した DBをインストールするのを忘れていました。

rails db:migrate

4. websocket用の宛先変更

下記ファイルでローカルのVMをさしていた部分を一時的にAWS内のインスタンスを指すように変更して正常に動くか確認します。

my1stRails/app/assets/javascripts/cable.js
//= require action_cable
//= require_self
//= require_tree ./channels
(function() {
  this.App || (this.App = {});
  App.cable = ActionCable.createConsumer("ws://hogehoge.com:28080/");
}).call(this);

5. その他修正

自分用のメモでもあるので対象のコミットを貼っておきます。

Puma用のconfigファイル

cable/config.ru
# cable/config.ru
# it's used like 'bundle exec puma cable/config.ru -b tcp://192.168.10.5:28080/cable'
require ::File.expand_path('../../config/environment', __FILE__)
Rails.application.eager_load!

run ActionCable.server

下記を追記します。

config/application.rb
 config.action_cable.mount_path = '/cable'

ActionCableのサーバーはcable/config.ru内に記述しているのでこちらは外します。

config/routes.rb
# mount ActionCable.server => '/cable'

5.さいごに

今回最終的に出来上がったものは、
Pull8を含む丸バツです。
1タブにつき1ウェブソケットなので、同じ画面のチャットのソケットを使いまわしています。

WebSocket Example

MariMurotani
フルスタックエンジニアとして17年働いています。Qiitaはメモ用にはじめました。 最近はRailsとフロントとAWS少しとCI少し。 ガラケーからスマフォに移行した全盛期をフルスタックエンジニアとして自社サービス開発をしながら過ごし、その後ブリッジSEやPM業をしながらシステム開発分野・ウェブサービス事業などで働いています。最近は少しゆっくりRailsを中心に勉強中。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away