2011-08-13 13 views
1

Railsでの例外処理はどうすればできますか?現在私は次のようにしています。各コントローラメソッドでRailsでの低レベル例外処理

私は

begin 
    <myCode> 
rescue 
    <exception handler> 

を追加している。しかし、私はRailsので、私はそれぞれの方法からそれらを処理せずに、アプリケーションのコントローラ内の例外ハンドラメソッドを定義し、そこからすべての例外をキャッチすることができるはずだと思います。

私はアプリケーションコントローラで 'rescue_action_in_public'を使用しましたが、config/database.ymlに間違ったデータベース名を与えてアプリケーションをロードすると、それらの例外をキャッチしません。

私の質問は

1をしている - それはアプリケーションのコントローラ内の1つの例外ハンドラを持っていると例外をキャッチするために再コンパイルの練習ですか?そうでない場合は、標準的な方法は何ですか?

2 - どのように私は見られないDatabseのような例外を処理することができ、テーブルのフィールドを表示する権限を持っていない、低レベルの例外のなど種類

私はRailsの3の上に乗っていると私は、中にいくつかのプロジェクトを持っていますRails 2.3.8 as

答えて

1

PragProgによるAdvanced Rails Recipesの本によれば、一般的な例外処理は良いアプローチです。 rescue_action(すべての環境)、およびrescue_action_in_public(プロダクション)は、抽象コントローラクラスで例外をキャッチするために使用しています。だからあなたは正しい方法でそれをやる。

コントローラがロードされる前にブートアプリケーションが実行されるため、database.ymlを処理できません。それでも実行する必要がある場合は、ファイルが存在し、有効であることを確認するためにイニシャライザのrubyファイルを置き、DESCテーブルなどを実行するためにAR :: Base接続を初期化します。

0

Rails 3では、ApplicationControllerでrescue_fromを使用できます。キャッチしたい例外がより低いレベルにある場合、Rack Middlewareレイヤーを設定することで、コントローラがアクセスできない例外をキャッチすることができます。これはHoptoadの仕組みです。私は最近、rescue_fromを使って一般的な例外をキャッチし、html、json、xmlのためのよく定義されたhttpステータスコードとエラー応答を提供するレール3の宝石をリリースしました。これはあなたのニーズに合っているかもしれません。 https://github.com/voomify/egregious