2011-02-07 56 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