2011-02-07 30 views
10

Çok aşamalı uzantıyı kullanarak Capistrano'da iki ortamım var: prod ve test.Capistrano Tanımlanmamış değişkeni Görevde denetleme

Prod.rb'de gerekli olmayan test.rb'de birkaç değişkene ihtiyacım var ve bazı görevlerimin değişken tanımlanıp tanımlanmadığını kontrol edip kullanabilmelerini istiyorum. ayarlanmamış. o ihtiyacı yok çünkü foo: herhangi bir göndermede olmazdı

set :foo, 'bar' 

prod.rb:

Yani, testing.rb ben gibi bir şey olurdu. Benim görevlerinden biri olan, ben böyle bir şey yapmak istiyorum:

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

Ama hata almaya devam:

undefined local variable or method 'foo' 

görev tanımsız küresel değişkenler için test etmenin bir yolu var mı? gerekmez bütün ortamlarda

set :foo, '' 

: foo değişkeni Ya böyle bir şey yapmak gerekiyor?

cevap

16

Capistrano docs'da önerildiği gibi defined?(foo) yerine exists?(:foo) kullanmayı deneyin.

+1

Bunu biraz genişletmek için: tanımlı? yöntem bir değişken (foo) yerine bir sembol (: foo) alır. Set metodu aslında uygun ruby ​​değişkenleri yaratmaz, sadece değerleri dahili bir mağazada tutar. Bu yüzden değeri almak için getirme (: foo) kullanmanız gerekir. –

+0

Bu işe yaradı, teşekkürler. Ruby'ye oldukça aşina oldum ve bunun gibi kolay bir çözüm olduğunu düşündüm, ancak Google beni hayal kırıklığına uğrattı ve belgeleri kaçırdım. Değişkenlerin farklı olarak ayarlandığını düşünmüştüm, bu yüzden farklı kontrol edilmeleri gerekiyordu, ancak mevcut olduğunu bilmiyorlardı. Tamamen güldüm. Tekrar teşekkürler. – Jaymon

+0

Bu delilik! Tanımlamaya çalışıyordum? –