Я всегда только создавал задачи cap для каждой цели развертывания и использовал их в командной строке:
# deploy.rb
task :stage do
server 10.0.0.1 ...
end
> cap stage deploy
Вы также можете определить настраиваемые задачи внутри каждой целевой задачи, например, развертывание, которое выполняет очистку в стадии подготовки, но не в рабочей.
Поскольку эти целевые задачи по развертыванию редко бывают очень большими, я никогда не видел смысла в установке расширений cap для многоэтапного режима, но я полагаю, что другие ситуации могут отличаться.
Я думаю, что производство должно быть отделено от других ваших сред, в противном случае существует опасность того, что неправильное поведение процессов при постановке и т. П. Может повлиять на производительность.
Иногда я определяю задачи cap для удобства при подготовке, например, для очистки базы данных и ее перезагрузки из самого последнего рабочего дампа. Эти задачи должны проверять свою цель развертывания через переменную набора или тому подобное и отказываться запускаться для производства в качестве страховки от опечатки поздно ночью.
Соблазнительно добавить множество пользовательских действий в ваш файл deploy.rb, но я обнаружил, что это имеет тенденцию откатываться назад и требовать больших усилий по техническому обслуживанию по мере изменения вашей среды или изменения cap api.
Другая практика, которую я видел в более крупных средах, - это иметь учетную запись оболочки с проверкой, которая отслеживает стабильную ветку, специально настроенную для работы в качестве контрольной точки capistrano. Вы используете ssh и запускаете команды cap вместо локально. Это может помочь избежать проблем, связанных с тем, что ваш локальный checkout-файл deploy.rb содержит изменения, которые вы не готовы использовать при развертывании в производство. Это не проблема для git vs svn, но все же нужно быть осторожным, чтобы подумать о том, каков их локальный deploy.rb в тот момент, когда они запускают команды cap.
В наши дни Heroku действительно облегчает эту задачу, и EY и другие не сильно отстают.