2011-01-01 15 views
5

Sto cercando di utilizzare Capistrano per distribuire due ruoli diversi, utilizzando Bundler su entrambi, tuttavia il comando e le bandiere di Bundler saranno diversi. È possibile impostare variabili specifiche per un ruolo? O qualcosa di simile:Can Capistrano può impostare variabili in base a un ruolo?

set :bundle_flags, "--deployment --quiet", :role => "web" 

o:

role :web do 
    set :bundler_cmd, "--deployment --quiet" 
end 

Nessuna di queste due opzioni di lavoro, naturalmente. C'è un modo per realizzare questo, o qualcosa del genere?

risposta

1

Non c'è modo di avere valori di variabili personalizzate per ruolo.

Puoi invece utilizzare l'estensione multistadio da capistrano-ext per avere fasi diverse per i tuoi due ruoli diversi.

Se diverse fasi non ha senso per la distribuzione, è possibile scrivere il proprio bundle: installare compito ed eseguire comandi diversi in base ai ruoli

run "bundle --deployment --quiet", :roles => :web 
run "bundle --deployment", :roles => :app 

Come notato nel commento qui sotto, questo approccio, tuttavia , genererà errori se il ruolo non ha un server definito. Inoltre eseguirà ogni comando in modo seriale. Per aggirare entrambi questi problemi, utilizzare l'helper parallelo.

parallel do |session| 
    session.when 'in?(:web)', "bundle --deployment --quiet" 
    session.when 'in?(:app)', "bundle --deployment" 
end 
+0

La modalità multistadio non funziona poiché la sto già utilizzando per diverse fasi di implementazione. Inoltre, mettendo i comandi in serie come tale li eseguirà su un ruolo e poi sull'altro, il che può o non può essere un problema. Credo che genererà anche un errore se non si dispone di server che corrispondono a un ruolo. – silvamerica

+0

Hai ragione circa l'approccio run. Ho aggiunto un addendum sull'utilizzo dell'helper parallelo per risolvere entrambi i problemi. –

Problemi correlati