我需要一些建议。我正在研究我的第一个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)
在这种情况下,自定义中间件是透明/非阻塞的最佳做法是什么?我应该从该中间件中救出并显示异常/回溯吗?
谢谢。
答案 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/ }