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