Может ли Capistrano устанавливать переменные в зависимости от роли? - PullRequest
5 голосов
/ 01 января 2011

Я пытаюсь использовать Capistrano для развертывания в двух разных ролях, используя Bundler для обеих, однако команда и флаги Bundler будут разными.Можно ли установить переменные, которые являются специфическими для роли?Либо что-то вроде:

set :bundle_flags, "--deployment --quiet", :role => "web"

или:

role :web do
  set :bundler_cmd, "--deployment --quiet"
end

Конечно, ни один из этих двух вариантов не работает.Есть ли способ сделать это или что-то в этом роде?

1 Ответ

1 голос
/ 22 марта 2011

Невозможно использовать настраиваемые значения переменных для каждой роли.

Вместо этого можно использовать многоступенчатое расширение из capistrano-ext , чтобы иметь разные этапы для двух разных ролей.

Если разные этапы не имеют смысла для вашего развертывания, вы можете написать свой собственный пакет: установить задачу и выполнить разные команды в зависимости от ролей

run "bundle --deployment --quiet", :roles => :web
run "bundle --deployment", :roles => :app

Как отмечено в комментарии ниже, этот подхододнако возникнут ошибки, если в роли не определен сервер.Он также будет запускать каждую команду последовательно.Чтобы обойти обе эти проблемы, используйте параллельный помощник.

parallel do |session|
   session.when 'in?(:web)', "bundle --deployment --quiet"
   session.when 'in?(:app)', "bundle --deployment"
end
...