Rails

2015-07-12, rails capistrano passenger

cap deploy時にウェブサーバを再起動

意外と一筋縄ではいきませんでした。。

まずはパッケージのインストール。

$ sudo gem install capistrano-passenger

モジュール(gem)のロード部分をコメントアウトします。

Capfile
require 'capistrano/passenger'

この後色々とハマるポイントがあるんですが、以下のコマンドを使うと再起動の部分だけ実行してみることができますので、これでエラーを見ながら設定を調整していくことになります。

$ cap production deploy:restart

サーバのロールに「app」が入っていないと、そもそも何もしません。

config/deploy/xxx.rb
server 'hostname', user: 'username', roles: %w{app web}

ホスト側で権限の昇格(sudo)が必要な場合、以下を追加します。passengerを/usr/local下にインストールしている場合は、コマンドを絶対パスで書き直す必要があります。「sudo -i」を試したのですが、すべてのコマンドの間に「/usr/bin/env」が挟まっているためうまくいきませんでした。

config/deploy.rb
set :passenger_restart_with_sudo, true
set :passenger_restart_command, '/usr/local/bin/passenger-config restart-app'

ここがちょっと気持ち悪いんですが、少なくともenvコマンドについてsudoのrequirettyを外してやる必要があります。なにかもうちょっと限定的でスマートな解除方法ないでしょうか。。

/etc/sudoers.d/foo
Defaults!/usr/bin/env !requiretty
username ALL=(root) NOPASSWD:ALL

参考URL

この記事は役に立ちましたか?