deployment - Capistrano 部署如何使用 use_sudo 和 admin_runner

标签 deployment capistrano capifony

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

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

  • 当您使用 运行我想它永远是你的本地用户
  • try_sudo 我认为会检查 use_sudo 标志是否为真,如果是,它将使用 sudo 命令,如果不是,它将使用本地用户。如果您配置了 admin_runner,它将向配置为 admin_runner
  • 的用户发送 sudo
  • 须藤将始终尝试 sudo

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

    那么谁能告诉我我对这 3 个命令的描述是否正确?还有谁知道应该如何使用 admin_runner 和 use_sudo ,以便符号链接(symbolic link)也正确完成(以及 capistrano 完成的所有其他命令)?

    亲切的问候,

    大安

    最佳答案

    抱歉这么迟的回答大安。您对 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 的发布目录的内容。符号链接(symbolic link)指向?

    关于deployment - Capistrano 部署如何使用 use_sudo 和 admin_runner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8388037/

    相关文章:

    symfony - 上限部署 :cleanup fails with use_sudo=true

    c# - 如何在使用 TeamCity 构建后进行部署?

    grails - 在 liferay 6 上部署 grails portlet 时出错

    windows - 在 Windows 上安装共享 DLL 的位置

    ruby-on-rails - 加载错误 : cannot load such file -- active_support

    docker stack 使用 GPU 部署,但找不到 nvidia 设备

    git - Capistrano 无法使用 SSH pull Stash 存储库

    ruby-on-rails - 在 Capistrano 重新索引太阳黑子 Solr

    linux ssh 代理并添加 : avoid repeating command