2011-02-07 16 views
10

多段階拡張機能を使用しているCapistranoでは、私は2つの環境を持っています。Capistranoタスクの未定義変数のチェック

私はtesting.rbでprod.rbには不要ないくつかの変数が必要です。変数が定義されているかどうかをチェックしてその変数が定義されているかどうかを確認できるようにしたいのですが、設定されていません。それはそれを必要としないため、FOO:への参照を持っていないでしょう

set :foo, 'bar' 

prod.rb:

だから、testing.rbに私のようなものを持っているでしょう。私の仕事の一つで、私のような何かをしたいと思います:

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

をしかし、私はエラーを取得しておいてください。

undefined local variable or method 'foo' 

は、タスク内の未定義のグローバル変数をテストする方法はありますか?必要のないすべての私の環境では

set :foo, '' 

::fooの変数または私のような何かをしなければならないのですか? Capistrano docsで推奨されているように

答えて

16

exists?(:foo)の代わりdefined?(foo)を、使用してみてください。

+1

これを少し拡張する:定義された?メソッドは変数(foo)ではなくシンボル(:foo)をとります。 setメソッドは実際には適切なルビ変数を作成しません。単に内部ストアに値を保持します。そのため、fetch(:foo)を使用して値を取得する必要があります。 –

+0

これはうまくいきました。私はかなりRubyに慣れていないと私はこのような簡単なソリューションがあったと思ったが、Googleは私に失敗したと私はドキュメントでそれを逃した。私は変数が異なって設定されていると思ったので、彼らは異なってチェックする必要があったが、使用することを知っている必要はありませんでしたか?私は完全に困惑した。再度、感謝します。 – Jaymon

+0

これはクレイジーです!私は定義されたと試していた? –