Mam prostą aplikację railsową z kilkoma kontrolerami i niektórymi zadaniami rake. Kilka zadań jest wykonywanych przez cron skonfigurowany z whenever gem.Powiadomienia o wyjątkach Railsowych w zadaniach rake
Jednym z moich zadań jest wykonywana codziennie, a czasami podnosi wyjątek i domyślnie otrzymam to ostrzeżenie poprzez cron
rake aborted!
undefined method `parameterize' for nil:NilClass
Tasks: TOP => mailboxes:clean_processed
(See full trace by running task with --trace)
Chcę debugowania, co się dzieje, i z tego powodu Właśnie zainstalowałem exception notification klejnot z tej linii w moim Gemfile
gem "exception_notification", "~> 2.4.1", :require => 'exception_notifier'
i skonfigurowaniu go w moim pliku application.rb
z
# enable exception notification
config.middleware.use ExceptionNotifier,
:email_prefix => "[MyAppName] ",
:sender_address => %{"notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
Ponieważ ten klejnot jest oprogramowaniem pośredniczącym do stojaków, działa tylko w przypadku żądań internetowych, a nie w przypadku zadań rake. Chciałbym włączyć to także dla zadań rake i znalazłem this gist, które wykonują zadanie.
To działa, jednak to nie DRY, muszę powtórzyć konfigurację klejnot w tej metodzie, a ja też trzeba zmienić wszystkie swoje zadania Rake to ująć swoje oświadczenia w bloku jak w
exception_notify { actual_task_code }
Czy istnieje lepszy sposób na rozwiązanie tego problemu?
P.S. Jeśli muszę zmienić klejnot powiadomienia, nie byłoby problemu, ponieważ dodałem tylko kilka linii kodu do mojego projektu.
P.P.S. Wiem, że mogę również zmienić linię rake w crontabu, aby dodać opcję --trace
, ale nie podoba mi się to rozwiązanie, ponieważ zgłaszający wyjątek imho jest lepszym rozwiązaniem, które pomaga również w kodzie internetowym.
Aktualizacja Właśnie znalazłem to powiązane pytanie: exception_notification for delayed_job, ale obie odpowiedzi używają podobnej sztuczki.
zamierzam spróbować z usług online, takich jak airbrake (dawniej znany jako hoptoad) lub nadzwyczajne, ale obaj są płatne usługi ...
Aktualizacja 2: Próbowałem Airbrake App, bardzo fajna aplikacja, ale cierpi na ten sam problem, nadal potrzebuję zhakować plik Rake, aby powiadomić o wyjątkach od zadań rake. Jednak hack jest mniej suchy, ponieważ potrzebujesz tylko tego kodu:
# notify exceptions
def exception_notify
yield
rescue Exception => exception
HoptoadNotifier.notify exception
raise exception
end
Nie trzeba powtarzać żadnego parametru konfiguracyjnego. Myślę, że nie mogę zrobić nic lepszego, niż powiadomić o wyjątkach w zadaniach rake.
Aby włączyć rejestrowanie błędów rake, musisz dodać wiersz '' 'config.rescue_rake_exceptions = true''''' 'conifg/initializers/airbrake.rb'''. – KurtPreston