2009-10-01 14 views
17

Estoy usando el complemento Rails exception_notification en mi aplicación y me resulta muy útil.Complemento de notificación de excepción de Rails - Forzar enviar correo electrónico

Sin embargo, hay ocasiones en las que quiero detectar una excepción y tratarla con elegancia, pero aún así me gustaría recibir el correo electrónico de notificación de excepción. Parece que solo envía excepciones no detectadas, parece.

¿Alguien sabe cómo forzar el envío del correo electrónico para cuando ya ha detectado la excepción?

Respuesta

29

Descubrí cómo hacerlo. Aquí está el código que pondría en su controlador para activar el correo electrónico.

Para el Rails 2.3 version of the Exception_Notification plugin:

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

Para el Rails 3 version of the Exception_Notification plugin:

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

Para el 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

Cómo hacer esto a partir del modelo, porque quiero añadir bloques de rescate en el interior el método del modelo. ¿Cómo obtener request.env desde el interior del modelo? –

+0

@DonnyKurnia Puede simplemente poner ''} en lugar de 'request.env', aunque en el correo electrónico hay un error acerca de no tener acceso a la sesión y solicitar datos. –

+0

¿No hay forma de acceder a la solicitud? Estoy tratando de acceder a ella en una clase que no sea modelo que el controlador llama. – Rpant

0

Exception Notifier está específicamente diseñado para detectar errores no detectados. Una vez que detecta el error, depende de usted enviar el mensaje de correo electrónico usted mismo. La manera rápida y sucia es activar el código de correo de excepción cuando detecta la excepción. No puedo recordar cómo fue el método en mi cabeza, pero un vistazo rápido al complemento debería arrojar resultados. Busque render_exception_in_public (o algo así) para el código de correo.

Cuestiones relacionadas