Развертывание приложения Rails на нескольких серверах с использованием Capistrano - Рекомендации - PullRequest
41 голосов
/ 14 апреля 2010

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

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

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

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

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

Ответы [ 2 ]

71 голосов
/ 14 апреля 2010

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

set :application, "my-app"
set :repository,  "git@git.my-git-host.com: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"
# ...

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

4 голосов
/ 26 февраля 2016

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

role :app, %w{s01.foobaz.com s02.foobaz.com}, user: 'deployer'
role :web, %w{s01.foobaz.com s02.foobaz.com}, user: 'deployer'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...