У меня есть простое приложение rails с несколькими контроллерами и некоторыми задачами рейка. Пара задач выполняется cron, настроенным на всякий раз, когда gem .
Одна из моих задач выполняется ежедневно, и иногда она вызывает исключение, и по умолчанию я получаю это предупреждение cron
rake aborted!
undefined method `parameterize' for nil:NilClass
Tasks: TOP => mailboxes:clean_processed
(See full trace by running task with --trace)
Я хочу отладить происходящее, и по этой причине я только что установил это уведомление об исключении гем с этой строкой в моем Gemfile
gem "exception_notification", "~> 2.4.1", :require => 'exception_notifier'
и настроил его в моем application.rb
файле с
# enable exception notification
config.middleware.use ExceptionNotifier,
:email_prefix => "[MyAppName] ",
:sender_address => %{"notifier" <report@example.com>},
:exception_recipients => %w{me@example.com}
Поскольку этот гем является промежуточным программным обеспечением для стойки, он работает только для веб-запросов, а не для задач rake. Я хотел бы включить его также для задач с граблями, и я нашел этот гист , которые делают эту работу.
Это работает, однако это не СУХОЙ, мне нужно повторить настройку gem в этом методе, а также мне нужно изменить все мои задачи rake, чтобы заключить их операторы в блок, как в
exception_notify { actual_task_code }
Есть ли лучший способ решить эту проблему?
P.S. Если мне нужно изменить гем уведомлений, это не будет проблемой, потому что я добавил только несколько строк кода в свой проект.
P.P.S. Я знаю, что я также могу изменить грабли в crontab, чтобы добавить опцию --trace
, но мне не нравится это решение, потому что средство уведомления об исключениях imho - лучшее решение, которое также помогает в веб-коде.
Обновление Я только что обнаружил этот связанный вопрос: исключение_ уведомлений для delayed_job , но оба ответа используют похожую уловку.
Я собираюсь попробовать онлайн-сервис, такой как Airbrake (ранее известный как hoptoad) или Exceptional, но оба они платные ...
Обновление 2 : я попробовал приложение Airbrake , очень красивое приложение, но оно страдает от той же проблемы, мне все еще нужно взломать Rakefile, чтобы уведомить об исключениях из задач rake. Однако хак менее сухой, потому что вам просто нужен этот код:
# notify exceptions
def exception_notify
yield
rescue Exception => exception
HoptoadNotifier.notify exception
raise exception
end
Нет необходимости повторять какой-либо параметр конфигурации. Я думаю, что я не могу сделать лучше, чем это, чтобы получать уведомления об исключениях в задачах рейка.