15

私はいくつかのコントローラといくつかのレーキタスクを持つ単純なレールアプリケーションを持っています。いくつかのタスクは、whenever gemで設定されたcronによって実行されます。私の仕事のrakeタスクの例外例外通知ツール

一つは毎日実行され、いつかそれが例外を発生させ、デフォルトで私はcronのことで、この警告を受ける

私が起こっているとこのような理由のために、私はちょうどこの exception notificationをインストールしたものをデバッグしたい
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ファイルに設定され、このラインを持つ宝石

この宝石はラックミドルウェアなので、ウェブリクエストでのみ動作し、レーキでは動作しません。私はレーキの仕事のためにそれを可能にしたいと思います、そして、私は仕事をするthis gistを見つけました。

それは動作しますが、しかしそれはDRYではないですが、私はその方法で宝石の設定を繰り返す必要があると私はまた、

exception_notify { actual_task_code } 

のようにブロックで自分の発言を囲むためにすべての私のすくいタスクを変更する必要がある任意のはありますこれを解決するより良い方法は?

P.S.通知の宝石を変更する必要がある場合は、プロジェクトに数行のコードを追加するだけで問題はありません。

P.P.S.私はまた、--traceオプションを追加するためにcrontabのレイクラインを変更できることを知っていますが、私はその解決策が気に入らないので、例外通知機能imhoがウェブコードでも役立つより良い解決策です。

更新私はちょうどこの関連する質問を見つけました:exception_notification for delayed_jobしかし両方の答えは同じようなトリックを使用します。

私はエアブレーキ(旧hoptoadとして知られている)または例外のようなオンラインサービスを試してみるつもりですが、それらの両方がサービスを支払っている...

アップデート2:私は非常に、Airbrake Appを試してみましたすばらしいアプリケーションですが、同じ問題で苦しんでいますが、レイクタスクから例外を通知するためにRakefileをハックする必要があります。しかし、このコードが必要なだけで、このコードが必要なので、ハックはあまり乾燥しません。設定パラメータを繰り返す必要はありません。私はレーキのタスクで例外を通知するためにこれよりもうまくいっていないと思います。

答えて

5

救出できるように、エアブレーキの宝石patches Rakeは、それはすでに私が求めているものを行いますので...

+0

Rakeエラーのログを有効にするには、 '' conifg/initializers/airbrake.rb'''に '' config.rescue_rake_exceptions = true''行を追加する必要があります。 – KurtPreston

1

この提案をお寄せいただきありがとうございます。私は瞬間に1つのcronタスクしか持っていないので、それは素晴らしい仕事です。

それを乾燥させるために、あなたはおそらくAPP_CONFIGを経て、定数に設定を有効にできます。 https://github.com/cjbottaro/app_config

また、あなたはexception_notify { }のすべてをラップするtask :... doの世話をするものは何でもクラス拡張することができます。

+1

私はあなたに興味が最後のヒント、あなたは少し広げることができますか? – Fabio

+0

rakeタスクの仕組み、Railsフレームワークへの深い理解が必要です。私は詳細も知らない。しかし、あなたは好きなことをするために分類されたものを拡張することができます。 –

13

猿のパッチがレーキれ、設定/初期化子でtask.rbファイルを作成します::タスク#が含まれるように実行exception_notifyの機能性:

module Rake 
    class Task 
    alias :orig_execute :execute 
    def execute(args=nil) 
     orig_execute(args) 
    rescue Exception => exception 
     # Exception notification stuff 
    end 
    end 
end 

Rails 3.0.12、Rake 0.9.2.2でテスト済みです。

+1

"rake/task"を要求する必要があること、またはNameErrorのためにRailsのコンソールが動作しなくなることに注意してください。 –