【问题标题】:log backtrace, rescue_from and custom error pages记录回溯、rescue_from 和自定义错误页面
【发布时间】:2013-02-04 22:31:43
【问题描述】:

我正在尝试在一个项目中创建自定义错误页面 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

现在我的日志似乎充满了比通常更长的回溯。 为什么会这样?有没有办法只显示回溯的“重要”部分? 在这里调用airbrake是否正确?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 airbrake


    【解决方案1】:

    查看http://api.rubyonrails.org/classes/ActiveSupport/BacktraceCleaner.html。 Rails 使用它在显示之前清理你的 backrace。

    你可以这样使用它:

    Rails.backtrace_cleaner.clean(exception.backtrace)
    

    我实际上是在查看 rails 源代码,因为我认为您的异常在到达您的 render_error 方法时可能已经被清除了。

    【讨论】:

    • 尝试在我的 ApplicationController 中添加此代码时,我得到:未初始化的常量 ApplicationController::BacktraceCleaner
    • 谢谢!我这样使用它: cleanTrace = Rails.backtrace_cleaner.clean(exception.backtrace) Rails.logger.fatal cleanTrace.join("\n")
    猜你喜欢
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多