Как развернуть приложение rails для нескольких комбинаций домен/пользователь/база данных в Capistrano и Rails 3?

Это может показаться странным (или даже опасным), но я хотел бы развернуть одно приложение rails в нескольких доменах. Я создал одну CMS, которую поддерживаю для нескольких разных клиентов. Единственная разница между сайтами заключается в файлах CSS, изображениях, файле database.yml и файле config.yml. Когда я развертываю, я хотел бы обновить все их сайты одновременно. В каждом домене используются разные имена пользователей и пароли, поэтому я не могу использовать одного пользователя, который обычно задается в файле deploy.rb. По сути, мне нужно запустить развертывание для разных наборов пользователей, доменов и баз данных.

Мои потребности отличаются от простого развертывания на нескольких промежуточных, тестовых серверах или серверах с балансировкой нагрузки. Каждый веб-сервер — это уникальный и независимый производственный сервер, работающий так, как если бы это было отдельное приложение rails.

Мне нужно сделать что-то вроде следующего в deploy.rb:

role :app, "www.cats.com", "www.dogs.com"
role :web, "www.cats.com", "www.dogs.com"
role :db, "www.cats.com", "www.dogs.com" # both need the same migrations

set :deploy_to  "/home/#{cats_user}/www.cats.com",  "/home/#{dogs_user}/www.dogs.com"

Возможно ли что-то подобное? Если нет, то хорошая альтернатива будет принята с благодарностью!


person Tim Santeford    schedule 09.02.2011    source источник
comment
+1 Сначала я подумал, что это дубликат, но он немного отличается от обычного вопроса по этой теме.   -  person jdl    schedule 09.02.2011


Ответы (1)


Мы используем многоэтапный вариант capistrano-ext, как описано в этой статье.

Пример в блоге относится к разным этапам выпуска (тестирование, приемка, производство), но вы также можете использовать его для развертывания на разных серверах. И поскольку у каждого этапа есть свой собственный файл конфигурации, вы можете легко изменить конфигурацию (config.yml/database.yml) для каждого этапа.

Если у вас есть еще вопросы, просто спросите :)

person nathanvda    schedule 09.02.2011