我正在使用Rails應用程序。 只要出現錯誤,我就可以在我的生產服務器中看到下面的屏幕。 (文字:很抱歉,但出錯了)如何在生產模式下運行rails應用程序時啓用錯誤報告?
如何在我的服務器中啓用錯誤報告以查看實際錯誤? 我是否必須在Rails應用程序中進行任何配置更改或在我的服務器中啓用錯誤報告。
注:我的服務器是Ngnix。
我正在使用Rails應用程序。 只要出現錯誤,我就可以在我的生產服務器中看到下面的屏幕。 (文字:很抱歉,但出錯了)如何在生產模式下運行rails應用程序時啓用錯誤報告?
如何在我的服務器中啓用錯誤報告以查看實際錯誤? 我是否必須在Rails應用程序中進行任何配置更改或在我的服務器中啓用錯誤報告。
注:我的服務器是Ngnix。
如果您添加到您的config/environments/production.rb
:
config.consider_all_requests_local = true
你會看到同樣的錯誤,在開發中,但它也將禁用緩存爲生產應用等
我寧願建議你看看/log/production.log
。通常在屏幕上顯示相同的錯誤。
對於錯誤報告,有一個稱爲exception_notification的方便寶石,它在您的應用程序中每次發生異常時都會向您發送郵件。
如果您還想在頁面上獲得詳細且完全可自定義的錯誤報告,則必須進行一點編碼。 下面是我用什麼(我願意給你一個鏈接,我已經採取了這種來自哪裏,但我不能再找到它:()
定義一個ErrorsController
這樣的:
class ErrorsController < ApplicationController
ERRORS = [
:internal_server_error,
:not_found,
:unprocessable_entity,
:unauthorized
].freeze
ERRORS.each do |e|
define_method e do
respond_to do |format|
format.html { render e, :status => e }
format.any { head e }
end
end
end
端
創建初始化到控制器掛鉤到滑軌異常處理鏈:
require 'action_dispatch/middleware/show_exceptions'
module ActionDispatch
class ShowExceptions
private
def render_exception_with_template(env, exception)
env['exception'] = exception
body = ErrorsController.action(rescue_responses[exception.class.name]).call(env)
log_error(exception)
env.delete 'exception'
body
rescue Exception => e
log_error(e)
render_exception_without_template(env, exception)
end
alias_method_chain :render_exception, :template
end
end
爲ErrorsController::ERRORS
中的每個錯誤創建視圖(即, app/views/errors/not_found.html.erb等)。
我不主張這是最好的技術,但它使我受益匪淺到目前爲止(你可以輕鬆地添加頁新的錯誤,定製想要的方式和內容單獨顯示每個錯誤)。