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

Использование Capistrano для развертывания приложения Rails на нескольких веб-серверах

В настоящее время я создаю новую производственную среду для приложения Rails, которое включает в себя несколько серверов с балансировкой нагрузки (в настоящее время только два, но со временем это будет увеличиваться).

Я бы хотел обработать развертывание приложения на всех этих серверах одной командой, используя Capistrano (которую я уже использую для моего существующего, единственного сервера). Единственный способ сделать это - использовать capistrano-ext (который я уже использую для развертывания в своих тестовых и промежуточных средах), определяя новую "среду" для каждого сервера приложений (app1, app2 и т.д.) и выполнение развертывания, используя что-то вроде:

cap app1 app2 app3 deploy

Это рекомендуемый способ сделать это или есть лучший подход?

4b9b3361

Ответ 1

Да. Capistrano управляет несколькими серверами изначально. Нет необходимости в capistrano ext.
Вам нужно только определить несколько roles

role :app, "myserver.example.com"
role :db,  "mysecondserver.example.com"

По умолчанию ваши задачи будут выполняться на каждом сервере. Но вы можете ограничить задачу только одним или несколькими серверами.

task :migrate, :roles => [:app, :db] do
    # ...
end

Здесь задача будет выполняться только в ролях приложения и db.

Вы можете сделать то же самое с методом run.

run "rake db:migrate", :roles => :db

Рейк db: migrate будет запущен только на сервере db.

Ответ 2

Предполагая capistrano multistage:

В config/deploy/production:

role :app, "server1", "server2", "server3"

Теперь cap deploy production будет развертываться на всех 3 серверах.

Ответ 3

Вот что я пробовал в rails 4:

конфиг /deploy.rb:

role :app, %w{server1 server2 server3}