簡體   English   中英

從 Rails 4 升級到 Rails 5 后,自定義錯誤處理不再起作用

[英]Custom error handling no longer works after upgrading from Rails 4 to Rails 5

我們使用config.exceptions_app將異常路由到客戶錯誤 controller( 在此處描述)。 這在我們的 Rails 4 應用程序中運行良好,但自從我們升級到 Rails 5 后,此設置不再有效,並且在處理 function 時出現錯誤“未定義的局部變量或方法 `env'”。

應用程序.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

感謝@zakariah1 的幫助(如果您想發布答案,我會給您信任)。

事實證明,我必須對 render_error function 進行一些更改才能使一切正常。 我在下面發布了 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM