2009-11-02 14 views
19

Attualmente sto configurando un nuovo ambiente di produzione per un'applicazione Rails che include più server di applicazioni con bilanciamento del carico (attualmente solo due, ma questo aumenterà nel tempo).Utilizzo di Capistrano per distribuire un'applicazione Rails su più server Web

Mi piacerebbe gestire la distribuzione dell'app su tutti questi server in un unico comando utilizzando Capistrano (che già utilizzo per il mio server singolo esistente). L'unico modo che posso vedere di fare questo è usare capistrano-ext (che in realtà uso già per distribuire nei miei ambienti di test e di staging), definendo un nuovo 'ambiente' per ogni server applicativo (app1, app2 e così via) ed eseguendo una distribuzione che utilizza qualcosa come:

cap app1 app2 app3 deploy 

È questo il modo consigliato di farlo o c'è un approccio migliore?

risposta

9

Sì. Capistrano gestisce più server in modo nativo. Non c'è bisogno di capistrano ext.
Hai solo bisogno di definire più roles

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

Per impostazione predefinita le attività saranno eseguite su ogni server. Ma è possibile limitare un'attività solo a uno o alcuni server.

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

Qui, l'attività verrà eseguita solo sui ruoli app e db.

È possibile fare lo stesso con il metodo di esecuzione.

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

Il rake db: migrate verrà eseguito solo sul server db.

+8

Nota sulla sopra config. Più app server: ruolo: app, "app1.example.com", "app2.example.com", "app3.example.com" – scottd

+3

Questa non è la risposta corretta in base alla domanda posta – Rob

36

Assumendo capistrano multistage:

In config/deploy/production:

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

Ora un cap deploy production sarà distribuire a tutti e 3 i server.

+0

lo faccio se voglio più server che utilizzano l'ambiente di produzione, ma posso comunque essere in grado di eseguire la distribuzione su un server specifico? Dato il tuo esempio: basta implementare su "server1", ma avendo appena production.rb, è possibile? – farukg

2

Questo è quello che ho provato in rails 4:

config/deploy.rb:

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

Questo ha funzionato per me con Rails 4. –

Problemi correlati