2010-11-23 5 views
27

私はHeroku上にRails 3アプリケーションを構築しています。現在、私のエラーページと404ページはすべて標準のレール/ヒーローページです。Rails 3 - エラーと404ページのカスタマイズ

これら2つをカスタマイズしたいと思います。エラーページを持っている、とGoogleで見つけたすべてのチュートリアルは歳に404

用のページを持っている、とあなたは良い近代的なチュートリアルを提案してくださいすることができRailsの3

上では動作しません。上記を行う方法についてのヒント?

おかげ

答えて

36

特定のエラーをキャプチャする場合は、にrescue_fromを使用してください。それ以外の場合は

あなただけのデフォルトエラーページを編集したい場合は、{} Rails.root 500.html400.htmlファイルを編集/公共

3

まあrails3はまだパブリックフォルダ内の同じ404.html、422.htmlや500.htmlを使用しています。それらをカスタマイズすることができます。

あなたが実際にこれらの例外をキャッチし、いくつかの動的なものをやって話をしている場合は、私は、基本的な機能は同じだと思うapplication_controllerすなわちActiveRecord::RecordNotFoundであなたの特定の例外をキャッチし、いくつかのaround_filterを持っており、それに何かをします。

11

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ページをレンダリングするために、あなたは単にあなたのルーターに追加することができます!

  1. そのような例外は、任意のHTTPで発生する可能性がありますので、あなたは ルートで試合を使用する必要があり、取得していない/ポスト/入れ/削除:しかし、あなたがこの道を行けば心に留めておくべきいくつかあります要求;
  2. のカスタム例外は、 config/environments/development.rbでconfig.consider_all_requests_localをfalseに設定しない限り、表示されません。理由は、リクエストが がローカルと見なされた場合、Railsは常にデバッグ 例外ページを表示することを優先します。 [または実行rails server -e production]
  3. コントローラの元の例外にいつでもアクセスできます。 env ["action_dispatch.exception"];
  4. の後にクッキー、セッション、またはフラッシュを設定することはできません。例外が発生します。それらはすべて既に クライアントにシリアル接続されていました。
  5. 最後に、 は単に公共/ STATUS.htmlにページをレンダリングRailsので使用されるデフォルトの例外アプリケーションがここにあります: action_dispatch /ミドルウェア/ public_exceptions.rb

は何でもあなたがエラーで行うことを忘れないでくださいコントローラ、それは何も "空想的"であってはならない。あなたのアプリケーションで何かが間違っていたので簡単にしてください!

関連する問題