2009-10-01 32 views
17

Uygulamamdaki Rails exception_notification eklentisini kullanıyorum ve çok yararlı buluyorum. Bununla birlikte, bir istisna yakalamak ve incelikle anlaşma yapmak istediğimde, ancak istisna bildirimi e-postasını almak istediğim durumlar vardır. Görünüşe göre sadece görünmeyen istisnalar için görünüyor.Rails Exception Bildirim Eklentisi - Force send email

İstisnayı yakaladığınız zamanlar için e-postayı göndermeyi zorlayacak herhangi biri var mı?

cevap

29

Bunu nasıl yapacağımı anladım. İşte e-postayı tetiklemek için kontrol cihazınıza koyacağınız kod. Rails 2.3 version of the Exception_Notification plugin için

:

begin 
    10/0 
rescue Exception => e 
    ExceptionNotifier.deliver_exception_notification(e, self, request) 
end 

Rails 3 version of the Exception_Notification plugin için:

begin 
    10/0 
rescue Exception => e 
    ExceptionNotifier::Notifier.exception_notification(request.env, e).deliver 
end 

Rails 4 version (currently v4.0.1 of the exception_notification gem):

begin 
    some code... 
rescue => e 
    ExceptionNotifier.notify_exception(e) 
    ExceptionNotifier.notify_exception(e, env: request.env, data: { message: "oops" }) 
end 
+3

için içimde kurtarma blok eklemek istiyorum, çünkü, modelden bunu nasıl modelin yöntemi. Modelin içinden request.env nasıl edinilir? –

+0

@DonnyKurnia E-postada oturuma ve veri isteğine erişememeyle ilgili bir hata olmasına rağmen, sadece 'request.env' yerine {}' yazabilirsiniz. –

+0

İsteğin erişimine izin yok mu. Denetleyici tarafından çağrılan model olmayan bir sınıfta erişmeye çalışıyorum. – Rpant

0

İstisna Notifier özellikle yakalanmamış hataların yakalanması için tasarlanmıştır. Hatayı yakaladıktan sonra e-posta mesajını kendinize gönderebilirsiniz. İstisnaı yakaladığınızda, hızlı ve kirli yol istisna mesajının kodunu tetiklemektir. Yöntemin başımın üstünden nasıl çıktığını hatırlayamıyorum, ancak eklentiye hızlı bir şekilde bakmanız size sonuç vermelidir. Posta kodu için render_exception_in_public (veya bunun gibi bir şey) arayın.