4

Rails 3.0.20 と Ruby 1.8.7 のプロジェクトでカスタム エラー ページを作成しようとしています。

とにかく私のアプリケーションコントローラーで:

unless Rails.application.config.consider_all_requests_local
  rescue_from Exception, :with => :render_error
  rescue_from ActionController::RoutingError, ActionController::UnknownController,      ::AbstractController::ActionNotFound, ActiveRecord::RecordNotFound, :with =>    :render_error_not_found
end

次に、レンダリング エラー メソッド:

def render_error(exception)
  notify_airbrake(exception)
  Rails.logger.fatal exception
  Rails.logger.fatal exception.backtrace.join("\n")
  respond_to do |format|
    format.html { render :template => "errors/error_500", :layout => 'layouts/application'}
    format.all { render :nothing => true, :status => 500 }
  end
end

現在、ログは通常よりも長いバックトレースでいっぱいになっているようです。なぜそれが起こっているのですか?バックトレースの「重要な」部分だけを表示する方法はありますか? ここでエアブレーキと呼ぶのは正しいですか?

ありがとう

4

1 に答える 1

8

http://api.rubyonrails.org/classes/ActiveSupport/BacktraceCleaner.htmlを確認してください。Rails はこれを使用して、表示前にバックレースをクリーンアップします。

次のように使用できます。

Rails.backtrace_cleaner.clean(exception.backtrace)

例外が render_error メソッドに到達するまでに既にクリーンアップされている可能性があると考えたため、実際に Rails のソース コードを調べています。

于 2013-02-04T22:59:45.967 に答える