2012-03-09 50 views
4

我想在應用程序中出現異常並呈現常規500頁時發送電子郵件。我找不到如何執行第500頁渲染:如何在rescue_from中渲染500頁

class ApplicationController < ActionController::Base 
    rescue_from StandardError do 
    send_email_of_error 
    # what goes here? 
    end 

    ... 
end 

回答

10

再次揚起異常將有可能給你想要的東西:

rescue_from StandardError do |exception| 
    send_email_of_error 
    raise exception 
end 

您也可以打電話render來渲染自己的網頁,the docs有這是一個例子。

但爲什麼要重新發明輪子? exception notifier gem已經做到了這一點,並且可以自定義和測試。

+0

這是偉大的。我發現原來兩年沒有更新。我會嘗試這個版本。 – mbdev 2012-03-09 18:29:36

+0

不幸的是,原來顯示錯誤頁面,但狀態碼爲200. – 2014-10-30 22:01:14

2

這也許適合您需求的方法:

class ApplicationController < ActionController::Base 
    rescue_from Exception, :with => :render_500 

    def render_500(exception) 
    @exception = exception 
    render :template => "shared/500.html", :status => 500 
    end 
end 
+6

絕不應該從異常中拯救。而不是像Andrew Marshall的回答那樣使用StandardError。 – dmur 2014-11-21 19:53:20

+0

@dmur如果你解釋你的評論,這對他人會有幫助。問題是如何渲染500頁。這在Andrew Marshalls的答案中沒有涉及。無論你是從Exception還是StandardError中拯救 - 我從來不會這麼做,因爲你對這個錯誤一無所知,所以讓它崩潰並修復它 - 在這裏並不重要。在我的答案我應該寫「AnyException」 – awenkhh 2014-11-22 21:47:19

+2

你是對的,這裏有一個解釋:http://stackoverflow.com/questions/10048173/why-is-it-bad-style-to-rescue-exception-e-在旁註 – dmur 2014-11-25 21:22:01