2

尝试使用 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

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

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

4

1 回答 1

1

within语法是你告诉 Capistranoexecute命令的位置。我不确定为什么这对你不起作用。我已将您的示例复制并粘贴到我的一个应用程序中,它运行良好:

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。因此,例如,如果您需要执行两次执行,一次执行 in release_path,另一次执行 in :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
于 2018-04-05T16:35:29.020 回答