2015-03-27 7 views
1

Есть ли способ отключить некоторые before/after крючки в Capistrano3?Отключить крючки для Capistrano3?

Например, я хочу развернуть код для моего (Rails) приложения, но я не хочу запускать приложение при первом развертывании. (Может быть, это не «идеальный», но есть целый ряд причин, почему я не хочу, чтобы сделать это.)

Я знаю следующие варианты:

  1. Отключить задачи я не» t хотите запустить как часть моего файла deploy.rb, например, Rake::Task['deploy:compile_assets'].clear_actions.
  2. Извлеките соответствующие require заявления из моего Capfile, например, # require 'capistrano/rails/assets'.

Что бы я хотел, это иметь возможность вызвать конкретную задачу ИЛИ передать некоторые флаги командной строки на cap [stage] deploy. То, что я хочу сделать, примерно такое же, как deploy:setup, но эта задача недоступна в Capistrano3.

Каков наилучший способ для этого?

ответ

2

Вариант 1: Отключение требуют заявления с ENV переключателя

Как уже упоминалось, удаление require заявления является самым простым способом, чтобы получить результат, который вы ищете. Для того, чтобы иметь возможность контролировать это в командной строке, я хотел бы использовать опцию ENV, например:

# In Capfile 
# Include tasks from other gems included in your Gemfile 
unless ENV["CAP_DISABLE_PLUGINS"] 
    require "capistrano/bundler" 
    require "capistrano/rails" 
    # etc. 
end 

Затем запустите:

CAP_DISABLE_PLUGINS=1 cap production deploy 

Вариант 2: Определение пользовательской задачи

Для более точного управления тем, какие задачи выполняются, определите настраиваемую задачу.

Если вы запустите cap [stage] deploy с опцией --trace, вы увидите вывод отладки всех задач, которые вызывается. Просмотрите этот вывод и решите, какие из этих задач вам нужны, и которые вы хотите пропустить. Затем соберите свой выбор в пользовательскую задачу.

Например, это должно развернуть свой код и симлинки его current, но пропустить работы bundler, составление активов, или миграции базы данных:

# Place this in config/deploy.rb 
namespace :deploy do 
    task :setup do 
    invoke "deploy:check" 
    invoke "deploy:new_release_path" 
    invoke "git:create_release" 
    invoke "deploy:set_current_revision" 
    invoke "deploy:symlink:shared" 
    invoke "deploy:symlink:release" 
    invoke "deploy:log_revision" 
    end 
end 

Затем просто запустите:

cap production deploy:setup 
Смежные вопросы