Tengo una aplicación de rieles simple con algunos controles y algunas tareas de rake. Un cron configuró un par de tareas con whenever gem.Notificador de excepción de rieles en tareas de rastreo
Uno de mi tarea se ejecuta todos los días y en algún momento se plantea una excepción y por defecto que reciben esta advertencia por cron
rake aborted!
undefined method `parameterize' for nil:NilClass
Tasks: TOP => mailboxes:clean_processed
(See full trace by running task with --trace)
quiero depurar lo que está sucediendo y por esta razón por la que acaba de instalar este exception notification joya con esta línea en mi Gemfile
gem "exception_notification", "~> 2.4.1", :require => 'exception_notifier'
y configurado en mi archivo application.rb
con
# enable exception notification
config.middleware.use ExceptionNotifier,
:email_prefix => "[MyAppName] ",
:sender_address => %{"notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
Dado que esta joya es un middleware de rack, solo funciona para solicitudes web y no para tareas de rake. Me gustaría habilitarlo también para tareas de rake y encontré this gist que hacen el trabajo.
Funciona, sin embargo no es SECO, tengo que repetir la configuración joya en ese método y también tengo que cambiar todas mis tareas rastrillo para encerrar sus declaraciones en un bloque como en
exception_notify { actual_task_code }
¿Hay alguna mejor forma de resolver esto?
P.S. Si necesito cambiar la notificación, la gema no sería un problema porque agregué solo algunas líneas de código a mi proyecto.
P.P.S. Sé que también puedo cambiar la línea de rastreo en el crontab para agregar una opción --trace
, pero no me gusta esa solución, porque el notificador de excepciones es una mejor solución que también ayuda en el código web.
Actualización Acabo de enterarme esta pregunta relacionada: exception_notification for delayed_job pero ambas respuestas usan un truco similar.
Voy a tratar con un servicio en línea como Airbrake (anteriormente conocido como hoptoad) o excepcional, pero ambos se pagan los servicios ...
Actualización 2: He probado el Airbrake App, muy buena aplicación, pero sufre por el mismo problema, todavía tengo que hackear el Rakefile para notificar excepciones de las tareas de rake. Sin embargo, el truco es menos seco porque solo necesita este código:
# notify exceptions
def exception_notify
yield
rescue Exception => exception
HoptoadNotifier.notify exception
raise exception
end
No es necesario repetir ningún parámetro de configuración. Creo que no puedo hacer nada mejor que esto para recibir notificaciones de excepciones en las tareas de rake.
Para habilitar el registro de errores de Rake, deberá agregar la línea '' 'config.rescue_rake_exceptions = true''' a' '' conifg/initializers/airbrake.rb'''. – KurtPreston