こんにちは。Enjoy IT Life管理人の仁科(@nishina555)です。
PumaとはRails(Ruby/Rackアプリケーション)のWebサーバーです。
Pumaを起動することでHTTPリクエストがさばけるようになり、Railsアプリケーションでリクエストに対する動的な処理が行われます。
今回はRailsアプリケーションにおけるPumaの起動・停止方法について紹介します。
なお、検証で利用するRuby on Ralsは6.0.3.2を利用します。
目次
RailsアプリケーションにおけるPumaの起動方法
Pumaの起動方法は3つあります。
- rails s
- pumaコマンド
- pumactl
以下ではそれぞれの起動方法の詳細について紹介します。特に以下の3つの観点における各起動方法の挙動の違いについて説明します。
- 起動方法
- 停止方法
- 実行環境の切り替え方法
rails sで起動する方法
rails s
を実行するとRailsアプリケーションが起動するのと同時にPumaも起動します。
rails s
と一緒にPumaが起動しているのはアプリケーションログからもわかります。
$ bin/rails s
=> Booting Puma # ← Pumaが起動している
=> Rails 6.0.3.2 application starting in development
=> Run `rails server --help` for more startup options
rails s
を実行後、プロセスを確認するとPumaのプロセスが存在しています。
### プロセス確認
$ ps -ef | grep puma
webuser 71046 49736 1 04:43 pts/0 00:00:01 puma 4.3.5 (tcp://localhost:3000) [rails-app]
### pumaの設定ファイルに記載されているpidfileの確認(ファイルが存在している = 起動している)
$ cat tmp/pids/server.pid
71046
Pumaではデフォルトの設定ファイルであるconfig/puma.rb
のほか、実行環境に応じたconfig/puma/[実行環境].rb
という設定ファイルを用意できます。
rails s
の場合はconfig/puma/[環境名].rb
→ config/puma.rb
の優先順位で設定ファイルを読み込みます。
Railsアプリケーションのデフォルトの実行環境はdevelopmentなので、rails s
で起動すればconfig/puma/development.rb
→ config/puma.rb
の順で設定ファイルの有無を確認します。そして、ファイルが存在すれば設定を読み込みます
一方、rails s -e production
もしくはENV[RAILS_ENV] = production
の実行環境でrails s
を起動すればconfig/puma/production.rb
→ config/puma.rb
の順で設定ファイルの有無を確認します。
### デフォルト
$ rails s
→ 開発環境の設定でpumaが起動
### 実行環境を指定する場合
$ rails s -e production
→ 本番環境の設定でpumaが起動
### ENV[RAILS_ENV] = 'production'の場合
$ rails s
→ 本番環境の設定でpumaが起動
rails s
で起動されたPumaのプロセスを停止させる場合はkillコマンドを利用します。
$ kill `cat tmp/pids/server.pid`
pumaコマンドで起動する方法
以下のコマンドでPumaを起動します。
$ puma
Puma starting in single mode...
* Version 4.3.5 (ruby 2.7.1-p83), codename: Mysterious Traveller
* Min threads: 0, max threads: 16
* Environment: development
rails s
の場合と同様、pumaコマンドもconfig/puma/[環境名].rb
→ config/puma.rb
の優先順位で設定ファイルを読み込みます。
ENV[RACK_ENV] = development
の環境でpumaコマンドを実行すればconfig/puma/development.rb
→ config/puma.rb
の順で設定ファイルの有無を確認します。
ENV[RACK_ENV] = production
であればconfig/puma/production.rb
の有無がまず確認されます。
### デフォルト
$ puma
→ 開発環境の設定でpumaが起動
### ENV[RACK_ENV] = 'production'の場合
$ puma
→ 本番環境の設定でpumaが起動
pumaコマンドの場合、オプションで設定ファイルの指定をすることも可能です。
### デフォルトの設定ファイルを指定
$ puma -C config/puma.rb
# -C: 設定ファイル読み込み
→ デフォルトの設定でpumaが起動
### 本番環境用の設定ファイルを指定
$ puma -C config/puma/production.rb
→ 本番環境の設定でpumaが起動
pumaコマンドで起動されたPumaはrails s
同様、killコマンドを利用して停止します。
$ kill `cat tmp/pids/server.pid`
pumactlで起動する方法
以下のコマンドで起動します。
$ pumactl start
* Environment: development
* Listening on tcp://0.0.0.0:3000
pumactl
にはプロセスを確認するコマンドが用意されています。
$ pumactl status
Puma is started
pumactl
の場合はrails s
やpumaコマンドと異なり、実行環境をパラメーターで指定することはできません。
その代わり、設定ファイルをパラメーターとして渡すことでPumaの実行環境を切り替えられます。
### デフォルトの設定ファイルで起動
pumactl start
### 本番環境の設定ファイルで起動
pumactl -F config/puma/production.rb start
pumactl
の場合はrails s
やpumaコマンドと異なり、プロセス停止のコマンドが用意されているため安全にプロセスを終了できます。
### halt: 停止(Quit)
$ bundle exec pumactl halt
### stop: 停止(Terminated)
$ bundle exec pumactl stop
### 再起動
$ bundle exec pumactl restart
RailsアプリケーションにおけるPumaの設定ファイルの管理方法について
rails s
でPumaを起動できるので、RailsアプリケーションにおけるPumaの起動方法は『rails sで起動する方法』を採用すればよいでしょう。
設定ファイルについてはconfig/puma.rb
にdevelopmentの設定、config/puma/[実行環境].rb
にそれぞれの実行環境用の設定ファイルを用意しておくとよいでしょう。
例えば、本番環境でのみnginxとPumaをソケット通信させたい場合はconfig/puma/production.rb
にソケット通信の設定を記述しておきます。
そうすることでrails s
であればPumaのみが立ち上がり、rails s -e production
であればnginxとPumaがソケット通信でつながった環境が立ち上がります。
まとめ
以上でRailsアプリケーションにおけるPumaの起動・停止方法の紹介を終わります。
今回の内容をまとめると以下のようになります。
起動 | 停止 | 実行環境切り替え | |
---|---|---|---|
rails s | rails s | killコマンド | RAILS_ENVもしくは-eオプションで環境指定 |
puma | puma | killコマンド | RACK_ENVもしくは-Cオプションで設定ファイル指定 |
pumactl | pumactl start | pumactl stop (halt) | -Fオプションで設定ファイル指定 |
この記事がいいなと思いましたらTwitter(@nishina555)のフォローもよろしくお願いします!