2012-05-25 34 views
7

我不希望对通过Capistrano执行的任何远程执行的命令使用sudo。具体来说,当我运行cap deploy:setup时,我会在第一个mkdir命令期间询问我的sudo密码。我在我的deploy.rb文件中添加了set :use_sudo, false,但这没有什么区别。卡皮斯特拉诺使用sudo即使使用“set:use_sudo,false”

我开始时使用了一个相当完整的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 

运行cap sudo_test结果我被提示输入sudo的我的密码。我在这里错过了什么(除了我已经退出的头发)?

谷歌发现

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

与具有类似问题的人一个线程。线程中没有注明结论/解决方案。

+0

那是什么'#{try_sudo}'位?如果你把它拿出来呢? – sbeam

+0

如果':use_sudo'设置为'false','#{try_sudo}'应该_sudoize_该命令。我将它包含在'sudo_test'中,因为capistrano rails任务可能也会使用它,并且很可能出现问题的原因。 –

+0

我们在我们的deploy.rb文件中使用'sudo -i '。 – yeowzir

回答

4

显然,不能禁用某些capistrano任务的sudo功能。假设服务器上的非特权用户不应该能够执行某些任务。

有问题的命令是mkdir。我认为如果父文件夹是他们有权这样做的,那么非特权用户应该能够运行此命令。我还会争辩说,用户可能实际上是一个特权用户,例如root。最佳实践?不必要。是的,在某些部署的理由范围内。

这里是链接到响应我原来的问题:

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

+1

:use_sudo,false为mkdir工作(使用deploy:setup) – vish

12

对于其他人谁运行到这个问题,并为像我这样的傻瓜。确保你没有引用错误。我:

set :use_sudo, "false" 

,当我打开它

set :use_sudo, false 

大部分事情开始工作,我所期望的方式。正如YWCA Hello指出的,仍有一些命令忽略了use_sudo设置。但是,不要忘记正确设置它。

+0

作为解释(未阅读capistrano代码的相关部分):“false”是ruby中的真实值。只有无和假是假的。任何其他价值,包括0,“”,[],被认为是真的。 因此设置:use_sudo为“false”与设置:use_sudo为true相同。 –