我有一个生产中的 Sinatra 应用程序(与 Puma 一起运行),其中包括一个 not_found 处理程序:
module MyApp
class Server
not_found do
[404, { 'Content-Type' => 'application/json' }, ['{"error":"not found"}']]
end
end
end
在开发中,这符合我的预期,在丢失的页面上,我看到带有 JSON 错误消息的 404。但是,在生产中,我看到了一个触发 Airbrake 警报的 NotFound 异常。
堆栈跟踪很长,但顶行指向这里:
/gems/sinatra-1.4.5/lib/sinatra/base.rb:1021 in "route_missing"
在这里: https://github.com/sinatra/sinatra/blob/v1.4.5/lib/sinatra/base.rb#L1021,它可以:
def route_missing
if @app
forward
else
raise NotFound
end
end
Sinatra 源代码中的评论说,如果您的应用程序不是中间件,则会转发错误,否则会引发错误。然而不知何故,我的期望是应该调用我的 not_found 处理程序。它在开发中被调用。我怎样才能最好地调试为什么它不在生产中?