2011-09-08 4 views
3

私は生産モードにあるかのように単にエラーを表示するためにレールを取得する方法を見つけようと多くの時間を掛けていました(単純に私はそれが私は非常に不満を抱いているrescue_action_in_public

だから最初に私はあなたが

config.consider_all_requests_local  = false 

を持つように設定/環境/ development.rbを設定し、アプリケーションのコントローラでできることを読む...)期待していません:

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 

の1を使用してアプリケーションのコントローラのメソッドだから私はまだ、スタックトレース、およびなしのログメッセージを取得することがなかった..

その後、私は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 

を変更する必要があります。

関連する問題