Я использовал capistrano / ext / multistage, чтобы сделать что-то подобное.
При доставке в производство я могу использовать cap prod deploy
, а при доставке в тест - cap test deploy
.
Мой Capfile выглядит как
require 'rubygems'
require 'railsless-deploy'
require 'capistrano/ext/multistage'
set :stages, %w(staging)
load 'config/deploy'
В config / deploy.rb - мой основной сценарий развертывания.
В config / deploy у меня есть сценарий для каждой среды.т.е. prod.rb и test.rb.
Эти сценарии, специфичные для среды, содержат переменные, специфичные для этих сред.Обычно я указываю такие вещи, как ветвь, пользователь, приложение, deploy_to, copy_remote_dir, copy_exclude и любые другие переменные, которые мне нужно использовать в основном config / deploy.rb, которые могут отличаться в разных средах.
Некоторые переменные могутне присутствуют во всех специфичных для среды скриптах, поэтому deploy.rb проверяет их существование перед их использованием.то есть
# Link upload area
if exists?(:uploads)
run "rm -rf #{current_release}#{uploads}"
run "ln -s #{shared_path}#{uploads} #{current_release}#{uploads}"
end
Иногда я копирую конфигурацию, специфичную для среды, используя промежуточное имя
# Copy config
run "cp #{current_release}/config/#{stage}/app/config.php #{current_release}/src/app"
Я должен упомянуть, что я использую git и стратегию копирования для моего deploy_via.В результате все конфиги загружаются на серверы в недоступных каталогах, а затем копируются на место.Ваш пробег может варьироваться.
Подробнее о многоступенчатом расширении для capirstrano можно узнать здесь: http://weblog.jamisbuck.org/2007/7/23/capistrano-multistage