いくつかのコントローラーといくつかのレーキタスクを備えた単純なRailsアプリケーションがあります。いくつかのタスクは、everygemで構成されたcronによって実行されます。
私のタスクの1つは毎日実行され、例外が発生することがあります。デフォルトでは、cronによってこの警告が表示されます。
rake aborted!
undefined method `parameterize' for nil:NilClass
Tasks: TOP => mailboxes:clean_processed
(See full trace by running task with --trace)
何が起こっているのかをデバッグしたいので、この行を使用してこの例外通知gemをインストールしました。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}
このgemはラックミドルウェアであるため、Webリクエストに対してのみ機能し、rakeタスクに対しては機能しません。レーキタスクでも有効にしたいのですが、この要点がその役割を果たしていることがわかりました。
それは機能しますが、DRYではありません。そのメソッドでgem構成を繰り返す必要があります。また、すべてのrakeタスクを変更して、ステートメントを次のようにブロックで囲む必要があります。
exception_notify { actual_task_code }
これを解決するためのより良い方法はありますか?
PSプロジェクトに数行のコードを追加しただけなので、通知gemを変更する必要がある場合でも問題はありません。
PPS crontabのレーキラインを変更してオプションを追加することもできることは知ってい--trace
ますが、その解決策は好きではありません。例外通知機能imhoは、Webコードでも役立つ優れた解決策です。
更新私はちょうどこの関連する質問を見つけました:delayed_jobのexception_notificationですが、両方の答えは同様のトリックを使用しています。
Airbrake(旧称hoptoad)やExceptionalなどのオンラインサービスを試してみますが、どちらも有料サービスです...
アップデート2:非常に優れたアプリケーションであるAirbrakeアプリを試しましたが、同じ問題が発生します。Rakefileをハックして、rakeタスクからの例外を通知する必要があります。ただし、次のコードが必要なだけなので、ハックはそれほど乾燥していません。
# notify exceptions
def exception_notify
yield
rescue Exception => exception
HoptoadNotifier.notify exception
raise exception
end
構成パラメーターを繰り返す必要はありません。レーキタスクの例外の通知を受け取るには、これ以上のことはできないと思います。