问题是默认处理程序是在Sinatra::ShowExceptions中定义的,它由:raise_errors配置设置控制,并且此设置是全部或全部。如果:raise_errors关闭,则可以在 Sinatra 应用程序中使用错误方法,但它必须用于所有异常,并且无法访问Sinatra::ShowExceptions中定义的错误处理程序。如果它打开,那么所有异常都由 ShowExceptions 中间件处理。
我想做的事情的基本原理是,至少在开发过程中,我希望以用户友好的方式处理“预期”错误,并且希望以对开发人员友好的方式处理“意外”错误。
我猜想做到这一点的唯一方法是定义一个从Sinatra::ShowExceptions继承的机架中间件类,并且在其使用方法中有一些额外的选项来指定要处理或不处理哪些异常类。
有没有我想念的更简单的方法?
(我正在使用 jruby,如果这有什么不同的话。)