2011-02-07 15 views
10

In Capistrano utilizzando l'estensione multistadio ho due ambienti: prod e testing.Capistrano Controllo della variabile non definita nell'Attività

Ho bisogno di alcune variabili in testing.rb che non sono necessarie in prod.rb e voglio che alcune delle mie attività siano in grado di controllare se la variabile è definita e usarla se lo è, ma ignorarla se non è impostato.

Così, in testing.rb vorrei avere qualcosa di simile:

set :foo, 'bar' 

prod.rb non avrebbe alcun riferimento a: pippo dal momento che non ne ha bisogno. In uno dei miei compiti, mi piacerebbe fare qualcosa di simile:

if defined?(foo) 
    # do something with foo 
else 
    # do something without foo 
end 

Ma continuo a ricevere l'errore:

undefined local variable or method 'foo' 

C'è un modo per testare le variabili globali non definite nel compito? O devo fare qualcosa del tipo:

set :foo, '' 

In tutti i miei ambienti che non hanno bisogno della variabile: foo?

risposta

16

Provare a utilizzare exists?(:foo) anziché defined?(foo), come raccomandato nello Capistrano docs.

+1

Per espandere un po 'questo: il definito? il metodo accetta un simbolo (: pippo) piuttosto che una variabile (pippo). Il metodo set in realtà non crea vere variabili ruby, mantiene solo i valori in un archivio interno. Ecco perché è necessario utilizzare fetch (: foo) per ottenere il valore. –

+0

Ha funzionato, grazie. Sono abbastanza estraneo a Ruby e ho pensato che ci fosse una soluzione semplice come questa, ma Google mi aveva deluso e mi mancava nella documentazione. Ho immaginato che le variabili venissero impostate in modo diverso, quindi dovevano essere controllate in modo diverso ma non sapendo di usare esiste? Ero completamente perplesso. Grazie ancora. – Jaymon

+0

Questo è pazzo! Stavo provando con definito? –

Problemi correlati