部署前运行任务:symlink:shared capistrano 3

时间:2014-07-27 04:52:10

标签: ruby deployment capistrano capistrano3

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

我无法访问新创建的版本目录,因为我需要它才能进入并运行编辑器(并运行其他一些项目)。我现在有;

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 /目录中创建的(带有适当的时间戳)但是我get'未定义的局部变量或方法" current_release"'

有没有办法可以在“当前'之前确定这个新版本目录?符号链接指向它?非常感谢你。

2 个答案:

答案 0 :(得分: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')

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

答案 1 :(得分:0)

我留下这个作为对我的问题的评论,但此刻,这是我能找到的唯一答案,所以我将其推广给答案;

好的,所以我已经确定了一种可能的方法,但它看起来很糟糕。即使像我这样的绝对初学者:

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

然后

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

有人请告诉我这太糟糕了,我应该怎么做:)