Ho una semplice applicazione di guide con alcuni controller e alcune attività di rake. Un paio di attività sono eseguite da cron configurato con whenever gem.Notificatore di eccezioni Rails nelle attività di rake
Un mio compito viene eseguito ogni giorno e qualche volta si solleva un'eccezione e per impostazione predefinita ricevo questo avvertimento da cron
rake aborted!
undefined method `parameterize' for nil:NilClass
Tasks: TOP => mailboxes:clean_processed
(See full trace by running task with --trace)
voglio eseguire il debug di quello che sta succedendo e per questo motivo che ho appena installato questo exception notification gemma con questa linea nella mia Gemfile
gem "exception_notification", "~> 2.4.1", :require => 'exception_notifier'
e configurato nel mio file application.rb
con
# enable exception notification
config.middleware.use ExceptionNotifier,
:email_prefix => "[MyAppName] ",
:sender_address => %{"notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
Poiché questa gemma è un middleware rack, funziona solo per le richieste Web e non per le attività rake. Mi piacerebbe abilitarlo anche per le attività di rake e ho trovato this gist che fa il lavoro.
Funziona, ma è non secca, ho bisogno di ripetere la configurazione gioiello a quel metodo e ho anche bisogno di cambiare tutti i miei compiti rake per racchiudere le loro dichiarazioni in un blocco come in
exception_notify { actual_task_code }
C'è qualche modo migliore per risolvere questo?
P.S. Se ho bisogno di cambiare la notifica gem non sarebbe un problema perché ho aggiunto solo poche righe di codice al mio progetto.
P.P.S. So che posso anche cambiare la linea di rastrello nel crontab per aggiungere un'opzione --trace
, ma non mi piace quella soluzione, causa il notificatore di eccezione imho è una soluzione migliore che aiuta anche nel codice web.
Aggiornamento Ho appena scoperto questa domanda correlata: exception_notification for delayed_job ma entrambe le risposte utilizzano un trucco simile.
ho intenzione di provare con un servizio online come Airbrake (precedentemente noto come hoptoad) o eccezionale, ma entrambi sono pagati i servizi ...
Update 2: ho provato il Airbrake App, molto bella applicazione, ma soffre per lo stesso problema, ho ancora bisogno di hackerare il Rakefile per notificare le eccezioni dalle attività di rake. Tuttavia l'hack è meno asciutto perché hai solo bisogno di questo codice:
# notify exceptions
def exception_notify
yield
rescue Exception => exception
HoptoadNotifier.notify exception
raise exception
end
Non è necessario ripetere alcun parametro di configurazione. Penso di non poter fare di meglio per ricevere notifiche delle eccezioni nelle attività di rake.
Per abilitare la registrazione degli errori di Rake, è necessario aggiungere la riga '' 'config.rescue_rake_exceptions = true''' a' '' conifg/initializers/airbrake.rb'''. – KurtPreston