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

标签 ruby-on-rails rvm capistrano bluepill

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

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

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

我认为我的 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

我还没有测试过以上内容。

我想知道的是:我应该在 sudoers 文件中放入什么,以允许 deploy 用户以 root 身份运行这些与 bluepill 相关的命令而无需密码?上this page他们提到过这一点:

deploy ALL=(ALL) NOPASSWD: /usr/local/bin/bluepill

但是在我的例子中,bluepill 二进制文件的路径会有所不同。由于项目特定的 gem 集,不同的项目会有所不同。我应该提及每个二进制路径还是有更好的方法来处理这个问题?

最佳答案

使用包装器和别名:

namespace :bluepill do
  task :setup do
    run "rvm alias create #{application} #{rvm_ruby_name_evaluated}"
    run "rvm wrappers #{application} --no-links bluepill"
  end
end

因此,在此任务之后,bluepill 可以通过 #{rvm_path}/wrappers/#{application}/bluepill 获得,即使您更改 ruby​​ 版本,它也将始终相同,因此可以将其添加到 sudoers 中以保留路径:

deploy ALL=(ALL) NOPASSWD: /home/my_user/.rvm/wrappers/my_app/bluepill

然后任务可以使用:

sudo #{rvm_path}/wrappers/#{application}/bluepill ...

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

关于ruby-on-rails - Bluepill - 安装在用户 RVM 中 - 项目特定的 gemset - 如何在没有密码的情况下使用 sudo 运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17576011/

相关文章:

Capistrano 3.7 新的 SCM 声明抛出错误

ruby - ‘bundle’ 没有这样的文件或目录

ruby-on-rails - Rails PaperClip 附件,知道是否有图像缩略图?

ruby - 在 Monterey 12.0.1 上安装 RVM 1.8.7 失败

ruby - 使用 rvm 安装 ruby​​ 时出错

ruby - OS X lion rvm、ruby 安装成功,但不执行。我错过了什么?

ruby - 管理 gems 所需库的更好方法?

ruby-on-rails - less-rails-bootstrap ... 哪里有 less 文件

ruby-on-rails - OAuth 提供者服务和 Rails 3

css - 动态更改 HAML 文件中的 css 属性值