私は、delayed_job プロセスを監視するために Bluepill をセットアップしました。
私の運用サーバーでは、ユーザーのホーム フォルダー (ユーザー名はdeploy
) にインストールされた RVM を使用しています。私のアプリの gem は、独自のプロジェクト固有の gemset にインストールされています。そのため、bluepill gem とそれに対応するバイナリが~/.rvm/....
フォルダー内にインストールされます。
capistrano を使用してアプリをデプロイするときに、bluepill を停止して開始し、DJ が再起動されるようにします。ここでカピストラーノのレシピの説明を見ています。
私の RVM 準拠の bluepill タスクは、次のようにする必要があると思います。
# Bluepill related tasks
after 'deploy:start', 'bluepill:start'
after 'deploy:stop', 'bluepill:quit'
after 'deploy:restart', 'bluepill:quit', 'bluepill:start'
namespace :bluepill do
desc 'Stop processes that bluepill is monitoring and quit bluepill'
task :quit, :roles => [:app] do
run "cd #{current_path}; sudo bluepill #{application}_#{rails_env} stop"
run "cd #{current_path}; sudo bluepill #{application}_#{rails_env} quit"
sleep 5
end
desc 'Load bluepill configuration and start it'
task :start, :roles => [:app] do
run "cd #{current_path}; sudo bluepill load #{current_path}/config/server/#{rails_env}/delayed_job.bluepill"
end
desc 'Prints bluepills monitored processes statuses'
task :status, :roles => [:app] do
run "cd #{current_path}; sudo bluepill #{application}_#{rails_env} status"
end
end
私はまだ上記をテストしていません。
私が疑問に思っているのは、ユーザーがこれらの bluepill 関連のコマンドだけをパスワードなしで root として実行sudoers
できるようにするには、ファイルに何を入れればよいでしょうか? このページdeploy
で、彼らはこれについて言及しました:
deploy ALL=(ALL) NOPASSWD: /usr/local/bin/bluepill
しかし、私の場合、bluepill バイナリへのパスは異なります。また、プロジェクト固有の gemsets のため、プロジェクトごとに異なります。各バイナリパスについて言及する必要がありますか、それともこれを処理するより良い方法はありますか?