6
5

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 1 year has passed since last update.

Ruby on Railsでpuma5系をdeployするときにsytemd関連で躓いたときの処方箋

Last updated at Posted at 2021-03-09

はじめに

先日Railsアプリをサーバーにデプロイしようとしたらpumaプロセスが立ち上がらない問題が出て躓いたのでそのメモ共有です。
記事がなかなかなかったので同じ現象が起こっている方の役に立てば幸いです

環境

ruby (2.7.1p83)
rails (6.0.3.4)
puma (5.1.0)
capistrano (3.9.0)
capistrano3-puma (5.0.4)

発生していた問題

  1. deployは成功しているのにpuma processが存在しない
  2. サーバー上で直接起動コマンドを叩いたらpumaは起動する
  3. deploy上で使用しているコマンド(systemctl restart puma / systemctl start puma)からはエラーが返ってこない
  4. systemctl status pumaではエラーが発生している模様
  5. pumaのログ置き場のshared/log/staging.logには何も発生していない

先に結論

capistrano3-puma 5系からはsystemdが推奨されています。
今回はsystemd経由でのrbenv呼び出しの設定漏れがありrubyのversionが正しくloadingされていませんでした
journalctl このコマンドさえ知っていたら全て解決した。

systemdについて

なぜ必要か

capistrano3-puma 5系においてプロセス管理方法がsystemdになった。

is 何

process管理ツール。再起動などいろいろ楽。

基本的なコマンド

# systemdのserviceのログをtailする
journalctl -f -u puma

# reload service file
sudo systemctl daemon-reload

# start / stop / restart / enable / disable / status
sudo systemctl (start|stop|restart|enable|disable|status) puma.service

# 設定ファイル
/etc/systemd/system/puma.service

journalctl -f -u pumaを使う

sudo systemctl restart puma.serviceを行うたびに下記エラーログが出てきました。

 3月 09 10:00:00 systemd[1]: Started Puma HTTP Server for project_name (staging).
 3月 09 10:00:00 systemd[1]: Starting Puma HTTP Server for project_name (staging)...
 3月 09 10:00:00 app[12810]: rbenv: version `2.7.1' is not installed (set by /var/www/project_name/releases/2021000000000000/.ruby-version)
 3月 09 10:00:00 systemd[1]: puma.service: main process exited, code=exited, status=1/FAILURE

どうやらrbenvからうまくruby versionを呼び出せないようです。
サーバー上で直接起動時には問題ないのでsystemd経由でrbenvがうまく使えていないことを疑いました。

systemdで環境変数を読み込む

調べているとsystemdでは.bash_profileなどに書いている環境変数を 読み込んでくれない のでrbenvを想定通りに動かしたい場合は別途設定が必要とのこと。

/etc/sysconfig/ファイル名 で設定するのが一般的みたいです。

$ which rbenv
/usr/local/rbenv
/etc/sysconfig/puma.env(拡張子不要ですがqiitaの制約上.env入れています)
RBENV_ROOT="/usr/local/rbenv" #上記結果をここに入れてください
/etc/systemd/system/puma.service
[Unit]
Description=Puma HTTP Server for project_name (staging)
After=network.target

[Service]
Type=simple
User=app
WorkingDirectory=/var/www/project_name/current
ExecStart=/usr/local/rbenv/bin/rbenv exec bundle exec puma -C /var/www/project_name/current/config/puma/staging.rb
ExecReload=/bin/kill -TSTP $MAINPID

EnvironmentFile=/etc/sysconfig/puma.env ### この行を追加

StandardOutput=append:/var/www/project_name/shared/log/puma_access.log
StandardError=append:/var/www/project_name/shared/log/puma_error.log

Restart=always
RestartSec=1

SyslogIdentifier=app

[Install]
WantedBy=multi-user.target

設定後

設定の再読み込みと再起動で無事pumaが立ち上がることを確認できました。

# 設定再読み込み
sudo systemctl daemon-reload

# サービス再起動
sudo systemctl restart puma

# プロセス確認
ps aux | grep puma 
6
5
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
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?