2011-02-07 24 views
10

在Capistrano中使用多级扩展我有两种环境:prod和testing。Capistrano在任务中检查未定义的变量

我需要在prod.rb中不需要的tests.rb中的一些变量,并且我希望我的一些任务能够检查变量是否已定义,如果是,则使用它,但如果它忽略没有设置。

所以,在testing.rb我会是这样的:

set :foo, 'bar' 

prod.rb不会有任何引用:FOO,因为它并不需要它。在我的任务之一,我想这样做:

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

但我不断收到错误:

undefined local variable or method 'foo' 

有没有办法来检验任务未定义的全局变量?或者我必须做类似的事情:

set :foo, '' 

在所有我不需要的环境中:foo变量?

回答

16

尝试使用exists?(:foo)而不是defined?(foo),如Capistrano docs中的建议。

+1

要扩大这一点:定义?方法使用符号(:foo)而不是变量(foo)。 set方法实际上并不创建正确的ruby变量,它只是将值保存在内部存储中。这就是为什么你需要使用fetch(:foo)来获取值。 – 2011-02-08 00:19:46