2011-01-09 5 views
7

ねえ、私があなたを助けてくれることを願っています。rails3で404/500のようなエラーを処理する方法

私のパブリックフォルダ内のデフォルトのエラーページ404.htmlと500.htmlにユーザーを誘導する方法を探しています。

ルーティングや名義エラーがある場合は、そこで指示する必要があります。 私は既にアプリケーションコントローラでいくつかのものを試しましたが、動作しませんでした。

多くの感謝!

+0

私は404.htmと500.htmをパブリックフォルダに入れてもOKだと思った。確信はないけど。 – PeterWong

+0

私はデフォルトでそこにそれらを持っています。しかし、エラーが発生した場合は表示されません – daniel

答えて

19

Railsは本番モードで実行しているときにこれを自動的に行います。アプリケーションをライブサーバーにアップロードすると、Railsはその例外を処理し、正しいヘッダー状態の正しいエラーページを表示します。これらのページがどのように見えるかを試してみたい場合は、http://localhost:3000/404.html

ライブサーバーにRailsアプリケーションを設定すると(Apacheを例として使用します)、アプリケーションの/publicフォルダとしてサイトルートを指定します。その後、そのサーバーアドレスへのリクエストが行われると、Apacheはまずパブリックフォルダを探し、静的資産を提供しようとします(これは[environment].rbの設定可能なオプションです)。要求されたページが見つからない場合、リクエストはRubyスタックを介して転送されます。

Railsが処理されない(つまり、開始する、レスキューする)エラーに遭遇した場合、スタック全体にエラーがスローされ、Apacheに(この例でも)適切なエラーを表示します。手動でそれを行う必要はありません - プロダクションモードで実行する場合

ActiveRecord::RecordNotFound => 404 (page not found) 
nil.method => 500 (server error) unless you turn off whiny nils 
ActionController::RoutingError => 404 (page not found) 
+0

大変ありがとうございます! – daniel

+0

@DannyRe - 私はあなたが役に立つと思うかもしれない私の答えにもっと多くを加えました – sethvargo

2

が自動的に行われます:

は、ここでは、開発モードと彼らが生産モードでレンダリングで表示されますいくつかの一般的なエラーです。

2

this postを見て、ルーティングエラーの原因となったすべてのリクエストをリダイレクトしてください。

関連する問題