2010-11-23 83 views
27

我在Heroku上構建了一個Rails 3應用程序。現在我的錯誤頁面和404頁面都是標準rails/heroku頁面。Rails 3 - 自定義錯誤和404頁面

我想定製這兩個。有一個頁面上的錯誤,並有一個404

在谷歌上的所有教程歲頁面,不on Rails的3

工作,能否請您提出一個很好的現代化教程或如何做到以上的提示?

感謝

回答

36

如果要捕獲特定錯誤,請在ApplicationController中使用rescue_from

否則,如果你只是想修改默認的錯誤頁面,編輯500.html400.html文件{} Rails.root /公共

3

好Rails3中仍然使用公用文件夾相同404.html,422.html和500.html。您可以自定義這些。

如果你談論的是實際捕獲這些異常,並做一些動態的東西,我覺得基本的功能是一樣的,有一些around_filter映入在application_controllerActiveRecord::RecordNotFound您的特殊例外,做的東西。

11

2013從Jose Valim

0更新爲Rails 3.

當Rails 3.0問世時,人們突然錯失的功能之一就是能夠更好地處理異常。問題是:由於Rails 3變得更加Rack「流利」,我們必須將某些功能移到中間件堆棧,這迫使我們移動整個異常處理。 Rails 3.2嘗試通過允許您設置自己的例外機架應用程序來重新引導一些自定義,這些應用程序在發生故障時會被調用。例如,你可以設置你的config/application.rb中的例外應用到你自己的路由器:

config.exceptions_app = self.routes 

現在,每次有一個例外,你的路由器將被調用。因此,呈現自定義404頁,你可以簡單地添加到您的路由器:

match "/404", :to => "errors#not_found" 

而且實現邏輯控制器,如你所願!不過,也有幾件事情要記住,如果你走這條路:

  1. 你需要在你的航線使用的匹配,而不是GET/POST/PUT /刪除 因爲這樣的異常可以在任何HTTP發生請求;
  2. 除非您在您的 config/environments/development.rb中將config.consider_all_requests_local設置爲false,否則您將無法在開發 中看到您的自定義例外。原因是,如果請求是 認爲是本地的,Rails總是傾向於顯示調試 異常頁面; [或運行rails server -e production]
  3. 您可以隨時訪問控制器中的原始異常,地址爲 env [「action_dispatch.exception」];
  4. 在 發生異常後,無法設置cookie,會話和閃光。他們都已經序列化回 客戶端;
  5. 最後,Rails的使用默認的例外情況的應用程序,只需 公共/ STATUS.html渲染頁面,請訪問: action_dispatch /中間件/ public_exceptions.rb

請記住,無論你在做錯誤控制器,它不應該是任何「幻想」。保持簡單,因爲你的應用程序已經出錯了!