Capistrano甚至用"set:use_sudo,false"使用sudo

YWC*_*llo 7 sudo capistrano ruby-on-rails-3 rvm-capistrano

我不希望通过Capistrano使用sudo执行任何远程执行的命令.具体来说,当我运行时cap deploy:setup,在第一个mkdir命令期间我被要求输入我的sudo密码.我添加set :use_sudo, false到我的deploy.rb文件中,但这并没有什么区别.

我从一个相当完整的deploy.rb文件开始,但是一旦我遇到问题就将其削减.这是我的最小版本仍然显示use_sudo不受尊重:

# App Definitions

set :domain, '[server-ip]'
role :app, domain
role :web, domain
role :db, domain, :primary => true

set :user, "my_app"
set :use_sudo, false

task :sudo_test do
  run "#{try_sudo} whoami"
end
Run Code Online (Sandbox Code Playgroud)

运行cap sudo_test导致我被提示输入我的sudo密码.我在这里想念的是什么(除了我已经拔出的头发)?

谷歌调查结果

https://groups.google.com/forum/?fromgroups#!topic/capistrano/QNYnvW8obrg

有人有类似问题的帖子.线程中没有结论/解决方案.

小智 12

对于遇到这个问题而且像我这样傻瓜的其他人.确保你没有引用虚假.我有:

set :use_sudo, "false"
Run Code Online (Sandbox Code Playgroud)

当我切换到

set :use_sudo, false
Run Code Online (Sandbox Code Playgroud)

大多数事情都按照我的预期开始工作.正如YWCA Hello指出的那样,仍有命令忽略use_sudo设置.但是,不要忘记正确设置它.


YWC*_*llo 5

显然,无法通过某些capistrano任务禁用sudo功能。假定服务器上的非特权用户不应执行某些任务。

有问题的命令是mkdir。我认为,如果父文件夹是他们有权执行此操作的文件夹,那么没有特权的用户应该可以运行此命令。我还要指出,该用户实际上可能是特权用户,例如root。最佳实践?不必要。在某些部署的合理范围内,可以。

这是对我的原始问题的答复的链接:

https://github.com/capistrano/capistrano/issues/211#issuecomment-7667467