Использование Capistrano для развертывания приложения Rails на нескольких веб-серверах
В настоящее время я создаю новую производственную среду для приложения Rails, которое включает в себя несколько серверов с балансировкой нагрузки (в настоящее время только два, но со временем это будет увеличиваться).
Я бы хотел обработать развертывание приложения на всех этих серверах одной командой, используя Capistrano (которую я уже использую для моего существующего, единственного сервера). Единственный способ сделать это - использовать capistrano-ext
(который я уже использую для развертывания в своих тестовых и промежуточных средах), определяя новую "среду" для каждого сервера приложений (app1
, app2
и т.д.) и выполнение развертывания, используя что-то вроде:
cap app1 app2 app3 deploy
Это рекомендуемый способ сделать это или есть лучший подход?
Ответы
Ответ 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}