これは多くの意見に基づいた質問です。Ruby - エラー処理 - 優れたプラクティス
- ジョブを実行する別のクラスを初期化するクラスがあるとします。ジョブは値を返し、最初にそれを呼び出したクラスによって処理されます。
ここで、例外とエラーログを記録しますか?呼び出しクラスのジョブクラスの初期化時に定義しますか?これは、ジョブ実行時または両方のレベルで例外を処理しますか?
これは多くの意見に基づいた質問です。Ruby - エラー処理 - 優れたプラクティス
ここで、例外とエラーログを記録しますか?呼び出しクラスのジョブクラスの初期化時に定義しますか?これは、ジョブ実行時または両方のレベルで例外を処理しますか?
ジョブが例外を処理する場合は、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
ともちろん、特定の例外を捕捉したいと思うでしょう。
おそらく、Rubyの例外を処理するための最良の答えはおそらくExceptional Rubyです。エラー処理に関するあなたの見解を変えるかもしれません。
これは、あなたの特定のケースを言いました。私は "バックグラウンドプロセス"を聞いて "仕事"を聞くので、私はその答えに基づいています。
あなたの仕事は、それが何かをしている間にステータスを報告したいと思うでしょう。これは、「キュー内」、「実行中」、「終了済み」のような状態ですが、「1000レコードのうち最初の100レコードを処理しています」という情報(ユーザーが直面している)の情報になります。
エラーがあなたのバックグラウンドプロセスで発生したのであれば、私の提案は二つある:
ジョブを終了する前に、例外をキャッチしていることを確認します。あなたのバックグラウンドジョブプロセッサはあなたのコードから来るランダム例外を好まないかもしれません。個人的には、例外をキャッチしてデータベースに保存するというアイデアのように、後で簡単に検索できます。次に、バックグラウンドジョブプロセッサに応じて、エラー報告を処理するかもしれません。 (私は、requeは、たとえば、と思う)。
フロントエンドで、AJAX(または何か)を使用して、ときどきジョブの実行状況をチェックします。 10秒ごとなどと言ってください。ジョブのステータスを取得することに加えて、この追加情報をユーザーに返すようにしてください(該当する場合)。
メソッドの全身を救助するときには、 'begin'と' end'メソッドは不要です。あなたはそれらを取り除くことができます。それでもそれでも問題はありません。 –
orly?ありがとう、それを知らなかった...まだ学習 – c0deNinja