2011-09-08 113 views
3

我已經花了很多時間在谷歌試圖找出如何簡單地得到鐵軌彷彿我公司在生產模式(簡單,所以我可以驗證它確實是顯示我的錯誤打獵左右我期待)......超級沮喪rescue_action_in_public方法

所以首先我看了,你可以設置配置/環境/ development.rb有

config.consider_all_requests_local  = false 

然後在應用控制器做:

protected 

def local_request? 
    false 
end 

def rescue_action_in_public(exception) 
    logger.info("**** LOL ****") 
    redirect_to :root, :notice => "lol" 
end 

然而,觸發一​​個ActiveRecord :: RecordNotFound錯誤仍然顯示堆棧跟蹤,它不把任何東西在我的日誌。

...接下來我讀到你必須要在生產模式......於是,我的..同樣的事情..

然後我讀,你需要更換local_request?方法應用控制器與一個在配置/環境/ production.rb

class ActionDispatch::Request 
    def local_request?(*args) 
    false 
    end 
end 

所以我做了..仍然得到堆棧跟蹤,並沒有日誌消息..

然後,我讀了rescue_action_in_public方法有是在ShowExceptions類..所以我提出,在配置/初始化/ error_handling.rb

module ActionDispatch 
    class ShowExceptions 

    protected 

    def rescue_action_in_public(exception) 

     logger.info("************** WTF ") 

     status = status_code(exception).to_s 

     template = ActionView::Base.new(["#{Rails.root}/app/views"]) 
     if ["404"].include?(status) 
     file = "/errors/404.html.erb" 
     else 
     file = "/errors/500.html.erb" 
     end 
     body = template.render(:file => file) 

     render(status, body) 
    end 

    end 
end 

不過..我得到一個堆棧跟蹤..,仍然沒有在我的日誌。

+0

AFAIK'rescue_action_in_public'用Rails 3.嘗試打破'rescue_from',這就是我所做的。 – whitequark

+0

同意這一點,你可以檢查Rails.env或request.local?裏面** rescue_from ** – Anatoly

回答

1

在生產模式下,只要運行該應用程序:

$ rails server -e production 

一切都應該工作正常。錯誤也記錄在您的log/production.log(日誌將出現在你停止服務器後,才)。

爲了讓一切工作,你可能首先需要

$ rake assets:precompile 

預編譯的資產,並在您config/environments/production.rb改變

config.serve_static_assets = true