2011-12-07 11 views
1

これは多くの意見に基づいた質問です。Ruby - エラー処理 - 優れたプラクティス

  • ジョブを実行する別のクラスを初期化するクラスがあるとします。ジョブは値を返し、最初にそれを呼び出したクラスによって処理されます。

ここで、例外とエラーログを記録しますか?呼び出しクラスのジョブクラスの初期化時に定義しますか?これは、ジョブ実行時または両方のレベルで例外を処理しますか?

答えて

1

ジョブが例外を処理する場合は、try catchのジョブに呼び出しをラップする必要はありません。

しかし、ジョブを初期化して実行するクラスは例外をスローする可能性があるため、そのレベルでも例外を処理する必要があります。ここ

は一例です。

def some_job 
    begin 
    # a bunch of logic 
    rescue 
    # handle exception 
    # log it 
    end 
end 

それがこれを行うために、その後意味がありません。

def some_manager 
    begin 
    some_job 
    rescue 
    # log 
    end 
end 

をしかし、このようなものは、より理にかなって:

def some_manager 
    begin 
    # a bunch of logic 
    some_job 
    # some more logic 
    rescue 
    # handle exception 
    # log 
    end 
end 

ともちろん、特定の例外を捕捉したいと思うでしょう。

+1

メソッドの全身を救助するときには、 'begin'と' end'メソッドは不要です。あなたはそれらを取り除くことができます。それでもそれでも問題はありません。 –

+0

orly?ありがとう、それを知らなかった...まだ学習 – c0deNinja

1

おそらく、Rubyの例外を処理するための最良の答えはおそらくExceptional Rubyです。エラー処理に関するあなたの見解を変えるかもしれません。

これは、あなたの特定のケースを言いました。私は "バックグラウンドプロセス"を聞いて "仕事"を聞くので、私はその答えに基づいています。

あなたの仕事は、それが何かをしている間にステータスを報告したいと思うでしょう。これは、「キュー内」、「実行中」、「終了済み」のような状態ですが、「1000レコードのうち最初の100レコードを処理しています」という情報(ユーザーが直面している)の情報になります。

エラーがあなたのバックグラウンドプロセスで発生したのであれば、私の提案は二つある:

  1. ジョブを終了する前に、例外をキャッチしていることを確認します。あなたのバックグラウンドジョブプロセッサはあなたのコードから来るランダム例外を好まないかもしれません。個人的には、例外をキャッチしてデータベースに保存するというアイデアのように、後で簡単に検索できます。次に、バックグラウンドジョブプロセッサに応じて、エラー報告を処理するかもしれません。 (私は、requeは、たとえば、と思う)。

  2. フロントエンドで、AJAX(または何か)を使用して、ときどきジョブの実行状況をチェックします。 10秒ごとなどと言ってください。ジョブのステータスを取得することに加えて、この追加情報をユーザーに返すようにしてください(該当する場合)。