ruby-on-rails - 在 Rails Router 中获取异常内容

标签 ruby-on-rails ruby exception airbrake

因此,我使用错误 Controller 处理异常,以便在生产环境中向我的用户显示动态内容。我在我的路线文件中有它要做:

  # Errors
  %w( 404 422 500 ).each do |code|
    get code, :to => "errors#show", :code => code
  end

现在唯一的问题是我正在路由错误,例如当我想通知 Airbrake 时我在 Controller 中丢失了信息。如何维护异常信息并将其发送到 500 上的 Airbrake?现在我得到的只是异常发生时发生的环境,这对调试目的帮助不大。

class ErrorsController < ApplicationController

  def show
    notify_airbrake(env) 
    render status_code.to_s, :status => status_code
  end

  protected

  def status_code
    params[:code] || 500
  end

end

最佳答案

您是否通过重定向到类似 http://your.site/500 的 URL 来处理错误?这将只是一个 HTTP 请求,就像任何其他请求一样,丢失了您所追求的异常上下文。相反,您可能想要使用 ActionControllerRescue功能。它看起来像这样:

class ApplicationController < ActionController::Base
  rescue_from StandardError, with: :render_error

  private

  def render_error(error)
    notify_airbrake(error)
    render text: 500, status: 500
  end
end

您可以添加多个 rescue_from 声明来处理不同类型的错误,例如 Rails 指南示例中的 ActiveRecord::RecordNotFound

关于ruby-on-rails - 在 Rails Router 中获取异常内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30042196/

相关文章:

regex - 为什么破折号会扰乱正则表达式搜索?

ruby-on-rails - jRails 替代品

java - 异常抛出或捕获并尝试

javascript - 选择所有复选框...使用 javascript 和 rails

ruby-on-rails - 使用嵌套资源或在资源上有一个集合

javascript - Acts_as_commentable_with_threading javascript 切换不适用于 Rails 5

ruby-on-rails - Active Admin - 根据第一个下拉菜单刷新第二个下拉菜单,Ruby on Rails

objective-c - 以编程方式调用 segue 原因 NSInvalidArgumentException,原因 : 'UILabel length' unrecognized selector

java.lang.illegalargumentException 无法将 java.lang.string 字段设置为 java.lang.String

ruby-on-rails - 如何跨多个应用程序共享 rspec 示例?