2017-02-03 6 views
2

ruby​​で未処理の例外をすべてキャッチまたは処理できますか?ルビーですべての例外をキャッチするには?

この動機は、たとえば、さまざまなファイルに何らかの例外を記録したり、システム管理に送信したり電子メールを送信したりすることです。

Javaでは、我々はルビーでこれを行うことができますどのように

register_shutdown_function('errorHandler'); 

function errorHandler() { 
    $error = error_get_last(); 
    /*code*/  
} 

PHP

process.on('uncaughtException', function(error) { 
    /*code*/ 
}); 

NodeJS

Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler ex); 

をしますか?

答えて

3

ルビーでは、begin/rescue/endブロックの周りにプログラムをラップするだけです。未処理の例外はすべてそのブロックまでバブルして処理されます。

+0

他のファイルやサードパーティのライブラリから例外がスローされても、これは機能しますか? – GarouDan

+1

はい、それでも動作します。 – eiko

+0

これは明確ではありません。 –

4

高度なソリューション使用

あなただけのすべての例外をキャッチし、あなたのログで、たとえば入れたい場合exception_handler gem、あなたはApplicationControllerに次のコードを追加することができます。

begin 
    # do something dodgy 
rescue ActiveRecord::RecordNotFound 
    # handle not found error 
rescue ActiveRecord::ActiveRecordError 
    # handle other ActiveRecord errors 
rescue # StandardError 
    # handle most other errors 
rescue Exception 
    # handle everything else 
end 

詳細をあなたが見つけることができますこのthread

+0

'レスキュー例外 'は本当に[重手]です(http://stackoverflow.com/questions/10048173/why-is-it-bad-style-to-rescue-exception-e-in-ruby)。あなたはそれが一般的に悪い考えである理由を述べることができます。 –

+0

コメントありがとうございます、私はまだそれを認識していませんでした。 – w1t3k

+0

問題ありません。 'レスキュー例外 'は、火災警報器にスヌーズボタンを置くようなものです。あなたはそれをすることができますが、おそらくそうではありません;) –

関連する問題