2012-08-10 16 views
8

Modellerimden biri için bir doğrulama başarısız olduğu bir Ruby on Rails uygulamasına sahibim. Bu doğrulamanın başarısızlıkla sonuçlanabileceği kod tabanına farklı giriş noktaları vardır. Nereden geldiğini bulmakla ilgileniyorum. Basit bir doğrulama yöntemi olduğundan, herhangi bir istisna söz konusu değildir, sadece yanlış yöntemden döndürüyorum ve kaydetme başarısız oluyor.Ruby Bir istisna olmaksızın backtrace alın

Şu anda bu onaylamadan hangi hizmet/yolun oluşturulduğunu anlamak için backtrace'i günlüğe kaydetmek mümkün mü? Bu nedenle, bu nesnenin geçerliliğini kaybetmesi için bu nesnenin neden değiştiğini görebiliyorum?

cevap

15

Sen caller() deneyebilirsiniz:

def foo2 
    puts caller 
end 
def foo 
    foo2 #line5 
end 
foo  #line 7 

Sonuç:

test.rb:5:in `foo' 
test.rb:7:in `<main>' 
1

Bunu yapmanın akıllıca bir yolu olduğundan emin değilim, ama bu işin bitmesini sağlayacak. Güzel bir küçük işleve bile sığdırabilirsin. İstisnalar atıp bunları kurtarmanın performansa etki edeceğinden emin değilim, ama muhtemelen üretimde böyle bir şey yapmak istemezsiniz.

begin 
    throw 
rescue 
    puts $!.backtrace 
end