自定义中间件块引发异常的回溯

Mic*_*ich 5 ruby rack ruby-on-rails

我需要一些建议。我正在开发我的第一个Rack中间件。但是,当从一个控制器引发一个异常时,我没有得到完整的异常回溯,因为我的中间件显然是最后一个可以使用的中间件:

NoMethodError (undefined method `accessible?' for "zFhY3ksiR4UdtGH3ZHs3":String):
   app/middleware/content_negotiation.rb:28:in `_call'
   app/middleware/content_negotiation.rb:20:in `call'
Run Code Online (Sandbox Code Playgroud)

而不是真正的回溯,即类似这样的东西:

[ 0] "/.../lib/doorkeeper/doorkeeper_for.rb:17:in `validate_token'",
[ 1] "/.../lib/doorkeeper/helpers/filter.rb:9:in `block in doorkeeper_for'",
Run Code Online (Sandbox Code Playgroud)

自定义中间件的第20行对应于:

 def call(env)
  dup._call(env)
 end
Run Code Online (Sandbox Code Playgroud)

第28行对应于_call

status, headers, response = @app.call(env)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,使自定义中间件透明/无阻塞的最佳实践是什么?我应该从该中间件中解救出来并显示异常/回溯吗?

谢谢。

Leo*_*rea 0

您可以使用 Rail 的回溯清理器

http://api.rubyonrails.org/classes/ActiveSupport/BacktraceCleaner.html

在下面config/initializers/backtrace_silencers.rb

您可以添加以下行来消除自定义中间件错误

Rails.backtrace_cleaner.add_silencer { |line| line =~ /app\/middleware/ }
Run Code Online (Sandbox Code Playgroud)