首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bluepill -安装在用户RVM中-项目特定的gemset如何在没有密码的情况下使用sudo运行?

Bluepill -安装在用户RVM中-项目特定的gemset如何在没有密码的情况下使用sudo运行?
EN

Stack Overflow用户
提问于 2013-07-11 00:26:50
回答 1查看 548关注 0票数 2

我设置了Bluepill来监控我的delayed_job进程。

在我的生产服务器上,我使用安装在用户主文件夹中的RVM (用户名是deploy)。我的应用程序的gem安装在它自己的项目特定的gemset中。因此,bluepill gem及其对应的二进制文件安装在~/.rvm/....文件夹中。

当我使用capistrano部署我的应用程序时,我希望停止并启动bluepill,这样我的DJ就可以重新启动。我正在看capistrano食谱here的说明。

我认为我的兼容RVM的bluepill任务必须如下所示:

代码语言:javascript
复制
# 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

我还没有测试过上面的内容。

我想知道的是:为了允许deploy用户在没有密码的情况下以超级用户身份运行这些与bluepill相关的命令,我应该在sudoers文件中放入什么内容?在this page上,他们提到:

代码语言:javascript
复制
deploy ALL=(ALL) NOPASSWD: /usr/local/bin/bluepill

但在我的例子中,到bluepill二进制文件的路径会有所不同。而且它对于不同的项目是不同的,因为特定于项目的gemsets。我应该提到每个二进制路径,或者有更好的方法来处理这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-11 01:30:57

使用包装器和别名:

代码语言:javascript
复制
namespace :bluepill do
  task :setup do
    run "rvm alias create #{application} #{rvm_ruby_name_evaluated}"
    run "rvm wrappers #{application} --no-links bluepill"
  end
end

所以在这个任务之后,可以通过#{rvm_path}/wrappers/#{application}/bluepill获得bluepill,即使你改变了ruby版本,它也是一样的,所以可以将它添加到sudoers中以保留路径:

代码语言:javascript
复制
deploy ALL=(ALL) NOPASSWD: /home/my_user/.rvm/wrappers/my_app/bluepill

然后任务可以使用:

代码语言:javascript
复制
sudo #{rvm_path}/wrappers/#{application}/bluepill ...

这里需要注意的是,包装器负责加载rvm环境,因为它在调用sudo时丢失了……但这只是一个细节;)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17576011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档