2009-10-01 15 views
17

Używam wtyczki Rails exception_notification w mojej aplikacji i uważam ją za bardzo użyteczną.Plugin Powiadomienia o wyjątkach - Force send email

Są jednak sytuacje, w których chcę wychwycić wyjątek i z wdzięcznością sobie z nim poradzić, ale nadal chcę otrzymać wiadomość e-mail z powiadomieniem o wyjątku. Wygląda na to, że wydaje się tylko dla niezłomych wyjątków.

Czy ktoś wie, jak wymusić wysłanie wiadomości e-mail, gdy już złapałeś wyjątek?

Odpowiedz

29

Wymyśliłem, jak to zrobić. Oto kod, który można umieścić w kontrolerze w celu uruchomienia wiadomości e-mail.

Dla Rails 2.3 version of the Exception_Notification plugin:

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

Dla Rails 3 version of the Exception_Notification plugin:

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

Dla 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

Jak to zrobić od modelu, bo chcę dodać blok ratunkowy wewnątrz metoda modelu. Jak uzyskać request.env z wnętrza modelu? –

+0

@DonnyKurnia Możesz po prostu wstawić '{}' zamiast 'request.env', chociaż w e-mailu występuje błąd dotyczący braku dostępu do danych sesji i żądań. –

+0

Nie można uzyskać dostępu do żądania. Próbuję uzyskać do niego dostęp w klasie innej niż model, która jest wywoływana przez kontroler. – Rpant

0

Powiadomienie o wyjątku zostało specjalnie zaprojektowane do wychwytywania nieprzechwyconych błędów. Po złapaniu błędu możesz samodzielnie wysłać wiadomość e-mail. Szybkim i brzydkim sposobem jest wyzwolenie kodu wyjątku mailer, gdy wychwycisz wyjątek. Nie mogę sobie przypomnieć, w jaki sposób ta metoda jest w mojej głowie, ale szybkie sprawdzenie wtyczki powinno przynieść ci rezultaty. Poszukaj kodu render_exception_in_public (lub czegoś podobnego) dla kodu programu pocztowego.

Powiązane problemy