2010-09-20 20 views
41

en Böyle bir rakefile var diyelim:Ruby tırmıkta bir görevi nasıl geçersiz kılarsınız?

file 'file1' => some_dependencies do 
    sh 'external tool I do not have control over, which sometimes fail to create the file' 
    ??? 
end 

task :default => 'file1' do 
    puts "everything's OK" 
end 

Şimdi ??? yerine hiçbir şey koyarsanız, ben harici araç dosyası oluşturmak için başarısız olsa bile, OK mesajı alır. Komisyonu bilgilendirmenin uygun yolu nedir, 'dosya1' görevi başarısız oldu ve iptal edilmeli (umuyoruz ki, hangi görev başarısız olduğu gibi anlamlı bir mesaj vermeyi umuyoruz) - şimdi düşünebildiğim sadece bir istisna var. sadece doğru görünmüyor.

P.S Araç, her zaman çıkış kodu olarak 0 değerini döndürür.

cevap

54

raise veya fail yöntemini, diğer Ruby komut dosyalarında olduğu gibi kullanın (fail, raise için bir diğer addır). Bu yöntem, komut dosyasının sonlandırılmasında görüntülenen hata mesajı olarak kullanılan bir argüman olarak bir dize veya istisna alır. Bu, komut dosyasının 1 değerini çağrı kabuğuna döndürmesine de neden olur. here ve diğer yerlerde belgelenmiştir.

+4

['fail'] (http://ruby-doc.org/core-2.0/Kernel.html#method-i-fail) yalnızca [yükseltmek] için bir takma addır (http: // ruby- doc.org/core-2.0/Kernel.html#method-i-raise) – Stefan

+0

Haklısınız. Bunu belirtmek için cevabımı güncelledi. –

+0

Bağlantı bozuk. –

11

abort("message")'u sorgulama görevini hatasız bir şekilde başarısızlıkla kullanmak için kullanabilirsiniz.

O 1.

Çıkış kodu 1 Unix benzeri sistemlerde bir başarısızlık kodu ile stdout ve çıkmak için message yazdırır.

Ayrıntılar için bkz. Kernel#abort.

İlgili konular