2010-09-02 13 views
12

Czy jest coś podobnego do after_filter, który nadal działa, jeśli akcja powoduje wyjątek?after_filter dla wyjątków

Używam zewnętrznego rejestratora (ponieważ jestem na Heroku); nagłówki odpowiedzi są filtrowane i rejestrowane w after_filter. Jeśli zostanie zgłoszony wyjątek, filtr nie działa, a ja nie mam dziennika danych nagłówka odpowiedzi.

Jeśli spróbuję podłączyć się do log_error lub rescue_action_in_public, nagłówek odpowiedzi nie będzie kompletny (ponieważ rzeczywisty render jest wywoływany po nich).

Czy istnieje inna funkcja, którą można przesłonić, która zostanie wywołana w czasie równoważnym do after_filter, ale zawsze działa niezależnie od tego, czy zgłoszony zostanie wyjątek?

Dzięki!

Odpowiedz

10

Można użyć filtru around_filter i przechwycić wyjątki. Np.

# in a controller 
around_filter :catch_exceptions 

def catch_exceptions 
    yield 
rescue ActiveRecord::RecordNotFound 
    permission_denied_response # gives a stock error page 
end 

Możesz dodać plik around_filter w klasie kontrolera application.rb lub w klasie kontrolera indywidualnego.

+0

To przechwytuje wyjątki, ale nie daje pełnych nagłówków odpowiedzi, jak sądzę. Cokolwiek wyświadczysz na ratunek, nie jest uwzględnione. . . Nie? –

+0

Jeśli jest wyjątek, nie było oryginalnej odpowiedzi lub nagłówków ... Nie jestem pewien, co to jest q. Może chcesz http://github.com/rails/exception_notification, który wysyła e-maile ze śledzeniem stosu, args i więcej, gdy jest wyjątek. –

Powiązane problemy