Capistrano: 在 deploy:published hook 之前需要知道发布目录

Capistrano: Before deploy:published hook needs to know release directory

我正在做一个任务,在 current 符号链接更改为指向新版本之前运行缓慢的 composer install 命令(因为我不希望我的新版本被破坏提取包装后生命的第一分钟)。

before 'deploy:publishing', :composartisan do
    on roles(:app) do
        within fetch(:latest_release_directory) do
            execute "cd #{current_path} && composer dump-autoload && composer install && php artisan storage:link && php artisan migrate"
        end
    end
end

这不起作用,因为 fetch(:latest_release_directory) returns 当前版本,而不是我们正在构建并即将在几分钟内发布的版本。

如何获取我们正在构建的版本的文件夹路径?

自己找到了解决方案。我需要更改 2 行:

  • within fetch(:latest_release_directory) 变成了 within release_path
  • cd #{current_path}变成了cd #{release_path}

这是完整的工作片段...

before 'deploy:publishing', :composartisan do
    on roles(:app) do
        within release_path do
            execute "cd #{release_path} && composer dump-autoload && composer install && php artisan storage:link && php artisan migrate"
        end
    end
end

有点啰嗦,但为什么 Capistrano 站点上没有真正记录下来?我在 Whosebug 上浏览其他 Capistrano 问题时偶然发现了我的解决方案。现在回头看,我发现 release_path 只在回滚页面 (http://capistranorb.com/documentation/getting-started/rollbacks/#deployreverting) 的 deploy:reverting 部分提到过一次。列出并解释所有可用变量的页面对我来说似乎是基本要素。

[不是一个back-seat-driver谁在开源上发牢骚,当我觉得我的 Capistrano 技能足够忍者可以可靠地写关于它。]