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

时间:2014-04-18 08:09:33

标签: ruby-on-rails ruby rack

我需要一些建议。我正在研究我的第一个Rack中间件。但是,当一个异常从一个控制器中提出时,我没有得到完整的异常的回溯,因为我的中间件显然是最后一个接手它:

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

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

[ 0] "/.../lib/doorkeeper/doorkeeper_for.rb:17:in `validate_token'",
[ 1] "/.../lib/doorkeeper/helpers/filter.rb:9:in `block in doorkeeper_for'",

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

 def call(env)
  dup._call(env)
 end

第28行对应_call

的那一行
status, headers, response = @app.call(env)

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

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用Rail的回溯清洁工

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

config/initializers/backtrace_silencers.rb

您可以添加以下行,这将使您的自定义中间件错误无效

Rails.backtrace_cleaner.add_silencer { |line| line =~ /app\/middleware/ }