Capistrano部署了如何使用use_sudo和admin_runner

时间:2011-12-05 15:56:48

标签: deployment capistrano capifony

我正在尝试配置Capistrano,以便它适用于我们的服务器设置。我们正在部署symfony项目,所以我也使用capifony。我仍然遇到一些权限问题。

在我们的服务器上,每个项目都以项目用户身份运行,因此每个项目都有自己的用户。所以我配置了use_sudo并将其设置为true,我将admin_runner配置为项目的用户。但它仍然没有用,所以我修改了capifony以开始使用try_sudo而不是常规运行。这使它的工作更好一些。但我对在这种情况下使用什么感到困惑。你有try_sudo,sudo和run。但哪个用例需要哪个?

  • 当您使用运行时,我认为它始终是您的本地用户
  • try_sudo 我认为将检查use_sudo标志是否为true,如果是,它将使用sudo命令,否则它将使用本地用户。如果您配置了admin_runner,它将sudo给配置为admin_runner
  • 的用户
  • sudo 会一直尝试sudo

现在我的问题是deploy:symlink方法这也只是一个常规的运行命令,所以它作为本地用户执行,当我尝试查看网站时,它会给出权限问题。

所有人都可以告诉我,如果我对3个命令的描述是正确的吗?还有谁知道如何使用admin_runner和use_sudo,以便正确完成符号链接(以及capistrano完成的所有其他命令)?

亲切的问候,

大安

1 个答案:

答案 0 :(得分:4)

为这样一个迟到的答案道歉道恩。您对Capistrano的理解是正确的。另请注意,:use_sudo标记默认为true

在Capistrano 2.11.2中,你会找到lib / capistrano / configuration / variables.rb:

_cset(:run_method)        { fetch(:use_sudo, true) ? :sudo : :run }

和lib / capistrano / recipes / deploy.rb:

def try_sudo(*args)
  options = args.last.is_a?(Hash) ? args.pop : {}
  command = args.shift
  raise ArgumentError, "too many arguments" if args.any?

  as = options.fetch(:as, fetch(:admin_runner, nil))
  via = fetch(:run_method, :sudo)
  if command
    invoke_command(command, :via => via, :as => as)
  elsif via == :sudo
    sudo(:as => as)
  else
    ""
  end
end

也许您的权限问题涉及您的服务器,以普通用户身份运行,无法读取current符号链接所指向的发布目录的内容?