我有 Bluepill 设置来监控我的延迟作业流程。
在我的生产服务器上,我使用安装在用户主文件夹中的 RVM(用户名为deploy
)。我的应用程序的 gem 安装在它自己的项目特定 gemset 中。因此,bluepill gem 及其对应的二进制文件安装在该~/.rvm/....
文件夹中。
当我使用 capistrano 部署我的应用程序时,我希望停止和启动 bluepill,以便重新启动我的 DJ。我在这里查看 capistrano 食谱的说明。
我认为我的 RVM 兼容蓝丸任务必须如下所示:
# 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
我还没有测试过上面的。
我想知道的是:我应该在我的sudoers
文件中放入什么以允许deploy
用户以 root 身份运行这些与 bluepill 相关的命令而无需密码?在此页面上,他们提到了这一点:
deploy ALL=(ALL) NOPASSWD: /usr/local/bin/bluepill
但是在我的情况下,bluepill 二进制文件的路径会有所不同。由于项目特定的gemset,不同的项目会有所不同。我应该提到每个二进制路径还是有更好的方法来处理这个?