如何在Capistrano 3获得新的发布路径?

时间:2018-04-05 13:14:37

标签: capistrano roots-sage

尝试使用Capistrano 3来部署项目并遇到问题。在我的一个任务中,我正在尝试更改目录,然后运行composer install。

对于我的生活,我无法将它cd放到正确的文件夹中。

现在,如果我这样做

set :theme_path, "#{release_path}/web/app/themes/sage"
append :linked_dirs, "web/app/uploads"
append :linked_files, ".env"
set :keep_releases, 3

namespace :deploy do

desc "Build"
after :updated, :build do
    on roles(:app) do
        within release_path do
            execute :composer, "install --no-dev --quiet"
            execute :cd, "#{fetch(:theme_path)}; composer install --no-dev --quiet"
        end
    end
  end

end

出于某种原因,在之前的版本中运行它。执行pwd而不是composer install表示它位于/ current /中,而不是在new / release /目录中。所以它在当前运行我的作曲家安装,然后执行所有符号链接,所以我最终总是在之前的部署中运行composer,所以我当前的部署永远不会工作。

因此,如果release_path是/ current /而不是当前正在部署的版本......我该如何获得该路径?或者我应该如何在两个地方运行composer install

1 个答案:

答案 0 :(得分:1)

within语法是如何告诉Capistrano execute命令的位置。我不确定为什么这不适合你。我已将您的示例复制并粘贴到我的某个应用中,但效果很好:

namespace :deploy do
  after :updated, :build do
    on roles(:app) do
      within release_path do
        puts capture("pwd")
      end
    end
  end
end

当我运行cap production deploy时,我会在输出中看到pwd

/home/deployer/apps/[REDACTED]/releases/20180405162938

你绝对不应该使用execute :cd。请改用within。例如,如果您需要执行两次执行,一次是release_path,另一次是:theme_path,那么我会执行以下操作:

within release_path do
  execute :composer, "install --no-dev --quiet"
end

within fetch(:theme_path) do
  execute :composer, "install --no-dev --quiet"
end