2009-11-02 4 views
19

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

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

cap app1 app2 app3 deploy 

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

ответ

9

Да. 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.

+8

Обратите внимание на выше конфигурации. Несколько серверов приложений выглядели бы так: Роль: приложение, «app1.example.com», «app2.example.com», «app3.example.com» – scottd

+3

Это неправильный ответ на вопрос, заданный – Rob

36

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

В config/deploy/production:

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

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

+0

, что делать я делаю, если я хочу, чтобы на нескольких серверах использовалась рабочая среда, но все же можно развернуть их на один конкретный сервер? С учетом вашего примера: просто установите его на «server1», но имея только production.rb, возможно ли это? – farukg

2

Это то, что я пытался в rails 4:

конфигурации/deploy.rb:

role :app, %w{server1 server2 server3} 
+0

Это работало для меня с Rails 4. –

Смежные вопросы