2012-07-25 53 views
4

我正在使用Rails應用程序。 只要出現錯誤,我就可以在我的生產服務器中看到下面的屏幕。 (文字:很抱歉,但出錯了)如何在生產模式下運行rails應用程序時啓用錯誤報告?

如何在我的服務器中啓用錯誤報告以查看實際錯誤? 我是否必須在Rails應用程序中進行任何配置更改或在我的服務器中啓用錯誤報告。

enter image description here

注:我的服務器是Ngnix。

回答

12

如果您添加到您的config/environments/production.rb

config.consider_all_requests_local = true 

你會看到同樣的錯誤,在開發中,但它也將禁用緩存爲生產應用等

我寧願建議你看看/log/production.log。通常在屏幕上顯示相同的錯誤。

1

對於錯誤報告,有一個稱爲exception_notification的方便寶石,它在您的應用程序中每次發生異常時都會向您發送郵件。

如果您還想在頁面上獲得詳細且完全可自定義的錯誤報告,則必須進行一點編碼。 下面是我用什麼(我願意給你一個鏈接,我已經採取了這種來自哪裏,但我不能再找到它:()

  1. 定義一個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 
    

  2. 創建初始化到控制器掛鉤到滑軌異常處理鏈:

    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 
    
  3. ErrorsController::ERRORS中的每個錯誤創建視圖(即, app/views/errors/not_found.html.erb等)。

我不主張這是最好的技術,但它使我受益匪淺到目前爲止(你可以輕鬆地添加頁新的錯誤,定製想要的方式和內容單獨顯示每個錯誤)。

相關問題