2010-09-02 14 views
12

¿Hay algo similar a un after_filter que aún se ejecute si la acción genera una excepción?after_filter para las excepciones

Estoy usando un registrador externo (ya que estoy en Heroku); los encabezados de respuesta se filtran y registran en after_filter. Si se produce una excepción, el filtro no se ejecuta y no tengo un registro de los datos del encabezado de respuesta.

Si trato de engancharme en log_error o rescue_action_in_public, el encabezado de respuesta no estará completo (ya que se llama a la representación real después de estos).

¿Existe otra función que pueda sobrescribir que se invocará en el momento equivalente a un after_filter, pero que se ejecutará siempre independientemente de si se produce una excepción?

Gracias!

Respuesta

10

Puede usar un filtro around_ y detectar las excepciones. Por ejemplo

# in a controller 
around_filter :catch_exceptions 

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

Puedes añadir el around_filter en la clase del controlador application.rb o en la clase de un controlador individual.

+0

Eso capta excepciones, pero no da los encabezados de respuesta completos, creo. Lo que sea que represente en el rescate no está incluido. . . ¿no? –

+0

Si hay una excepción, entonces no hubo respuestas originales o encabezados ... No estoy seguro de cuál es tu q. Tal vez quieras http://github.com/rails/exception_notification que te envíe un seguimiento de pila, argumentos y más cuando hay una excepción. –

Cuestiones relacionadas