问题是默认处理程序是在Sinatra :: ShowExceptions中定义的,它由:raise_errors配置设置控制,此设置全部或全部.如果:raise_errors已关闭,则可以在Sinatra应用程序中使用error方法,但必须将其用于所有异常,并且无法访问Sinatra :: ShowExceptions中定义的错误处理程序.如果它处于打开状态,则ShowExceptions中间件将处理所有异常.
我想要做的理由是,至少在开发过程中,我希望以用户友好的方式处理"预期"错误,并且我希望以开发人员友好的方式处理"意外"错误.
我猜这样做的唯一方法是定义一个继承自Sinatra :: ShowExceptions的机架中间件类,它在其use方法中有一些额外的选项来指定要处理或不处理的异常类.
有什么比我更容易丢失的方法吗?
(我正在使用jruby,如果这有任何区别.)
我发现这似乎有效:
set :raise_errors, false
set :show_exceptions, false
...
error BaseErrorClassForMySpecialErrors do
# ... special handling for sub-classes of this error class
end
$showExceptions = Sinatra::ShowExceptions.new(self)
error do
@error = env['sinatra.error']
$showExceptions.pretty(env, @error)
end
Run Code Online (Sandbox Code Playgroud)
换句话说,将:raise_errors和:show_exceptions设置为false以关闭ShowExceptions处理错误,然后创建一个单独的Sinatra :: ShowExceptions实例,并在错误do catch-all错误处理程序中调用其pretty方法.
希望为此目的创建一个额外的Sinatra :: ShowExceptions实例,没有任何意外的副作用.
| 归档时间: |
|
| 查看次数: |
1943 次 |
| 最近记录: |