即使设置了"set :use_sudo, false",Capistrano仍然使用sudo。

7
我不希望在通过Capistrano远程执行的任何命令中使用sudo。具体而言,当我运行cap deploy:setup时,在第一个mkdir命令期间会要求输入我的sudo密码。我在deploy.rb文件中添加了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

一个用户遇到类似问题的帖子。没有在帖子中得出结论/解决方案。


那个 #{try_sudo} 是什么?如果把它去掉会怎样? - sbeam
如果 :use_sudo 被设置为 false,则 #{try_sudo} 应该将命令转换为sudo模式。我将其包含在 sudo_test 中,因为 Capistrano Rails 任务可能也会使用它,而问题很可能就源自此。 - YWCA Hello
我们在deploy.rb文件中使用'sudo -i <cmd>'。 - yeowzir
以及这个:sudo 'aptitude install -y rsync' - yeowzir
如上所述,这篇文章最初的原因是 cap deploy:setup 在我不想要使用 sudo 时尝试使用它。cap deploy:setup 是一个预设的配方;我不打算对其进行修改。相反,我需要确定为什么选项 :use_sudo 不起作用。 - YWCA Hello
显示剩余2条评论
2个回答

12

对于其他像我一样遇到这个问题的人,请确保不要引用错误。我的引用是:

set :use_sudo, "false"

当我切换到它时

set :use_sudo, false

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


作为解释(不需要阅读capistrano代码的相关部分):在Ruby中,“false”是一个真值。只有nil和false是假值。任何其他值,包括0,“”,[],都被认为是真的。 因此,将:use_sudo设置为“false”与将其设置为true相同。 - Pascal

5
显然,使用某些capistrano任务不能禁用sudo功能。假设在服务器上的非特权用户不能执行某些任务。要讨论的命令是`mkdir`。如果父文件夹是他们有权限操作的文件夹之一,那么我认为非特权用户应该能够运行此命令。我还会说,用户实际上可能是特权用户,例如root。最佳实践?不一定。在某些部署环境中,符合合理性的要求是可以的。这是原始问题的响应链接:https://github.com/capistrano/capistrano/issues/211#issuecomment-7667467

1
使用 use_sudo, false 对于我在使用 deploy:setup 时创建目录很有效。 - vish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接