2011-02-07 11 views
10

En Capistrano, utilizando la extensión de varias etapas, tengo dos entornos: prueba y prueba.Capistrano Comprobación de una variable indefinida en la Tarea

Necesito algunas variables en testing.rb que no son necesarias en prod.rb y quiero que algunas de mis tareas puedan verificar si la variable está definida y usarla si es así, pero ignórenla si no está configurado.

Así, en testing.rb Me gustaría tener algo como:

set :foo, 'bar' 

prod.rb no tendría ninguna referencia a: foo ya que no lo necesita. En una de mis tareas, me gustaría hacer algo como:

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

pero aparece el error:

undefined local variable or method 'foo' 

¿Hay una manera de probar para las variables globales definidas en la tarea? O tengo que hacer algo como:

set :foo, '' 

En todos mis entornos que no necesitan la variable: foo?

Respuesta

16

Intente utilizar exists?(:foo) en lugar de defined?(foo), como se recomienda en el Capistrano docs.

+1

Para ampliar un poco esto: ¿definido? método toma un símbolo (: foo) en lugar de una variable (foo). El método set en realidad no crea las variables ruby ​​correctas, solo mantiene los valores en una tienda interna. Es por eso que necesita usar fetch (: foo) para obtener el valor. –

+0

Eso funcionó, gracias. No estoy muy familiarizado con Ruby y pensé que había una solución fácil como esta, pero Google me había fallado y me perdí en la documentación. Pensé que las variables se estaban configurando de manera diferente, por lo que necesitaban comprobarse de manera diferente, pero no sabían que el uso existía. Estaba completamente perplejo. Gracias de nuevo. – Jaymon

+0

¡Esto es una locura! Estaba tratando con definido? –

Cuestiones relacionadas