2013レール3.2の更新Jose Valim
0から
Rails 3.0が登場したとき、突然人が逃した機能の1つは、例外をよりよく処理する機能でした。問題は、Rails 3がより多くの "流暢な" Rackになったために、いくつかの機能をミドルウェアスタックに移さなければならず、このために例外処理全体を移動させなければならなかった。 Rails 3.2では、障害発生時に呼び出される独自の例外ラックアプリケーションを設定できるため、ゲームにカスタマイズを戻すことができます。たとえば、あなたがあなたの設定/ application.rbで独自のルータに例外アプリケーションを設定できます
config.exceptions_app = self.routes
さて、例外があるたびに、あなたのルータが呼び出されることになるだろう。
match "/404", :to => "errors#not_found"
をそして、あなたが望むように、コントローラのロジックを実装します。そのため、カスタム404ページをレンダリングするために、あなたは単にあなたのルーターに追加することができます!
- そのような例外は、任意のHTTPで発生する可能性がありますので、あなたは ルートで試合を使用する必要があり、取得していない/ポスト/入れ/削除:しかし、あなたがこの道を行けば心に留めておくべきいくつかあります要求;
- のカスタム例外は、 config/environments/development.rbでconfig.consider_all_requests_localをfalseに設定しない限り、表示されません。理由は、リクエストが がローカルと見なされた場合、Railsは常にデバッグ 例外ページを表示することを優先します。 [または実行
rails server -e production
]
- コントローラの元の例外にいつでもアクセスできます。 env ["action_dispatch.exception"];
- の後にクッキー、セッション、またはフラッシュを設定することはできません。例外が発生します。それらはすべて既に クライアントにシリアル接続されていました。
- 最後に、 は単に公共/ STATUS.htmlにページをレンダリングRailsので使用されるデフォルトの例外アプリケーションがここにあります: action_dispatch /ミドルウェア/ public_exceptions.rb
は何でもあなたがエラーで行うことを忘れないでくださいコントローラ、それは何も "空想的"であってはならない。あなたのアプリケーションで何かが間違っていたので簡単にしてください!