2011-01-09 32 views
7

嘿,我希望你能幫助我。如何處理像rails3中的404/500錯誤

我試圖找到一種方法,將用戶定向到默認的錯誤頁面404.html和500.html在我的公用文件夾。

因此,當存在路由或nomethod錯誤應該有指向。 我已經嘗試了一些東西在我的應用程序控制器,但它沒有奏效。

非常感謝!

+0

我以爲把公共文件夾404.htm和500.htm是好的。但我不確定。 – PeterWong 2011-01-09 17:07:32

+0

我在默認情況下獲得了那些內容。但是,如果出現錯誤,他們不會出現 – daniel 2011-01-09 17:08:40

回答

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) 
2

如果在生產模式下運行自動發生 - 不需要你做手工。