【问题标题】:Custom error handling no longer works after upgrading from Rails 4 to Rails 5从 Rails 4 升级到 Rails 5 后,自定义错误处理不再起作用
【发布时间】:2023-03-04 05:59:01
【问题描述】:

我们使用config.exceptions_app 将异常路由到客户错误控制器(描述为here)。这在我们的 Rails 4 应用程序中运行良好,但自从我们升级到 Rails 5 后,此设置不再有效,并且我们在处理函数中收到错误“未定义的局部变量或方法 `env'”。

application.rb

module MyApp
  class Application < Rails::Application

    # Route errors to our custom error controller
    # (See https://coderwall.com/p/w3ghqq)
    config.exceptions_app = lambda do |env|
      ExceptionsController.action(:render_error).call(env)
    end

  end
end

exceptions_controller.rb

class ExceptionsController < BaseController

  def render_error

    @exception = env["action_dispatch.exception"] # RAILS 5 RAISES ERROR HERE: "undefined local variable or method `env'"
    exception_wrapper = ActionDispatch::ExceptionWrapper.new(request.env, @exception)
    @status_code = exception_wrapper.status_code
    trace = exception_wrapper.application_trace

    # Custom notifications and stuff...

  end

end

【问题讨论】:

标签: ruby-on-rails exception ruby-on-rails-5


【解决方案1】:

感谢@zakariah1 的帮助(如果你想发布答案,我会给你信任)。

事实证明,我必须对 render_error 函数进行一些更改才能使一切正常。我在下面发布了 Rails 4 和 Rails 5 版本供参考:

def render_error

  # --- FOR RAILS 4: ---
  ## @exception = env["action_dispatch.exception"]
  ## exception_wrapper = ActionDispatch::ExceptionWrapper.new(env, @exception)

  # --- FOR RAILS 5: ---
  @exception = request.env["action_dispatch.exception"]
  exception_wrapper = ActionDispatch::ExceptionWrapper.new(request.env['action_dispatch.backtrace_cleaner'], @exception)

  trace = exception_wrapper.application_trace

  # Custom notifications and stuff...

end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    相关资源
    最近更新 更多