Подтвердить что ты не робот

Развертывание приложения Rails для нескольких серверов с использованием Capistrano - лучшие практики

У меня есть приложение rails, которое мне нужно развернуть на 3 сервера - machine1.com, machine2.com и machine3.com. Я хочу иметь возможность разворачивать его на всех машинах сразу и на каждой машине отдельно. Может ли кто-нибудь помочь мне с конфигурационным файлом/рецептом Capeleano скелета? Должно ли все это быть в deploy.rb или я должен его разбить в machine1.rb и т.д.?

Я думал, что на правильном пути я получаю Capistrano, чтобы принимать аргументы командной строки, но он задохнулся, когда я попытался установить роли в пространствах имен. Я передал бы "hosts = 1,2,3" в качестве аргумента и задал роль: app/web/db для "machine # {host}.com" после разделения на команду и перехода в каждый из них do | host | {}...

В любом случае, кроме создания 4 различных файлов deploy.rb и переименования его перед запуском кепки: развернуть каждый раз, я в тупике. Я хотел бы иметь возможность сделать следующее:

cap deploy:machine1:latest_version_from_svn
cap deploy:all_machines:latest:version_from_svn

Просто не знаю, все ли должно быть в deploy.rb, разбитом с пространствами имен или если он должен быть разбит на несколько файлов * deploy **. rb.

4b9b3361

Ответ 1

Все должно идти в одном файле. Вот пример:

set :application, "my-app"
set :repository,  "[email protected]:my-app.git"
set :keep_releases, 5
set :deploy_via, :remote_cache
set :git_enable_submodules, true
set :scm, :git
set :user, 'your-user-here'

set :deploy_to, "/var/www/staging.mydomain.com"
set :branch, 'staging'
set :rails_env, 'staging'

role :web, "machine1.mydomain.com", "machine2.mydomain.com", "machine3.mydomain.com"
role :app, "machine1.mydomain.com", "machine2.mydomain.com", "machine3.mydomain.com"
role :db, "db.mydomain.com"
# ...

Вы увидите, что указан только один сервер db. Это машина, с которой будут выполняться миграции. Если у вас есть только одна база данных (99,9% вероятность ответа на этот вопрос ДА), то обязательно укажите только один.

Ответ 2

Мне пришлось использовать несколько иной синтаксис.

role :app, %w{s01.foobaz.com s02.foobaz.com}, user: 'deployer'
role :web, %w{s01.foobaz.com s02.foobaz.com}, user: 'deployer'