【问题标题】:Running task before deploy:symlink:shared capistrano 3部署前运行任务:符号链接:共享 capistrano 3
【发布时间】:2023-04-04 20:56:01
【问题描述】:

我是 Capistrano (v 3.2.1) 的绝对菜鸟,所以请原谅我的错误,无用。我正在部署一个 PHP 应用程序并希望在 deploy:symlink:release 任务之前运行 composer install (仅在不运行回滚时)

我无法访问新创建的发布目录,因为我需要它能够 cd 进入其中并运行 composer(以及运行其他一些项目)。我目前有;

namespace :deploy do

    namespace :symlink do

        desc 'Run composer'
        task :runcomposer do
            on roles :all do

                execute "cd '#{current_release}' && composer install"
                execute "cd '#{current_release}' && ln -s /sites/shared/index.php index.php"
            end
        end

        before :release, :runcomposer

    end

end

此时似乎不存在 {current_release} 变量(这很奇怪,因为运行 git pull 的目录肯定是在 /releases/ 目录中创建的(带有适当的时间戳),但我得到了 '未定义的局部变量或方法“current_release”'

有没有办法在“当前”符号链接指向它之前确定这个新的发布目录?非常感谢您。

【问题讨论】:

    标签: ruby deployment capistrano capistrano3


    【解决方案1】:

    我已将此作为对我的问题的评论,但目前,这是我能找到的唯一答案,因此我将其提升为答案;

    好的,所以我已经确定了一种可能的方法,但这似乎很可怕。即使对于像我这样的绝对初学者:

    newreleasedir = capture('ls -t /sites/releases | head -1')
    

    然后

    execute "cd /sites/releases/#{newreleasedir} && composer install"
    

    请告诉我这太可怕了,我应该怎么做:)

    【讨论】:

      【解决方案2】:

      使用composer extension

      # Capfile
      require 'capistrano/composer'
      

      默认情况下会计划两个任务

      before 'deploy:updated', 'composer:install'
      before 'deploy:reverted', 'composer:install'
      

      删除一项默认任务

      Rake::Task['deploy:reverted'].prerequisites.delete('composer:install')
      

      在官方文档页面上阅读更多内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多