はじめに
Gemの更新作業にあたりpumaのバージョンを5.6.4にアップデートを行いました。
開発環境では問題なかったのですが、テスト環境でアプリケーションが起動しない現象が発生したため、
対応した内容を記述しています。
環境
- Ruby: 2.7.3
- Rails: 6.1.5
- puma: 5.6.4
発生していた問題
今までは、 puma -C config/puma.rb -d
のコマンドで起動していました。
issuesを見るとDaemonizationが廃止されていたたようです。
じゃあどうするか
issuesのコメントでは ↓のように systemd、upstartもしくはsupervisorを使ってくださいと記載されていました。
今回はsystemdを選択しました。
Use systemd/upstart/a process supervisor instead.
設定内容
Sysconfigに環境変数を記述
$ vim /etc/sysconfig/puma
# 環境変数を記述
DATABASE_USERNAME=''
DATABASE_PASSWORD=''
DATABASE_HOST=''
DATABASE_NAME=''
DATABASE_PORT=''
Unitファイルの構成
$ vim /etc/systemd/system/puma.service
[Unit]
# Unitの説明
Description=Puma App Server
# Unitより先に起動するUnit
After=network.target
[Service]
Type=notify
# 実行ユーザー
User=ec2-user
# サービスを定期的に監視して稼働状態をチェック
WatchdogSec=10
# プロセスの実行ディレクトリ
WorkingDirectory=/var/www/app/
# 環境変数の読み込み
EnvironmentFile=/etc/sysconfig/puma
# 実行コマンド
ExecStart=/bin/bash -lc "bundle exec puma -C config/puma.rb -e staging"
# プロセス停止時の再起動
Restart=always
[Install]
WantedBy=sockets.target
Unitファイルの反映
sudo chmod +x /etc/systemd/system/puma.service
sudo systemctl daemon-reload
sudo systemctl restart puma.service
自動起動設定
sudo systemctl enable puma.service
参考URL