Sinatra的全球救援和伐木异常

Jan*_*ane 5 ruby error-handling sinatra

如果出现异常,如何指定全局救援,如果将Sinatra用于API或应用程序,如何处理日志记录?

Mar*_*oda 6

404s可以在not_found方法的帮助下处理,例如:

not_found do
  'Site does not exist.'
end
Run Code Online (Sandbox Code Playgroud)

通过使用块调用error方法可以处理500s,例如:

error do
  "Application error. Pls try later."
end
Run Code Online (Sandbox Code Playgroud)

可以通过sinatra.errorin 访问错误的详细信息request.env:

error do
  'An error occured: ' + request.env['sinatra.error'].message
end
Run Code Online (Sandbox Code Playgroud)


lfe*_*445 5

我在开发环境中无法立即使用此功能-要使其正常工作,我必须show_exceptions在sinatra配置中将其设置为false。

class BaseApp < Sinatra::Base

  configure { set :show_exceptions, false }

  error do |err|
    raise "Error: #{err}"
  end

end
Run Code Online (Sandbox Code Playgroud)

将此设置设置为true时,将启用错误页面,这些错误页面会在发生未处理的异常时显示回溯和环境信息,但是我只能通过禁用它来触发自定义错误。

  • 这是正确的答案。没有配置行就无法工作。 (2认同)