Sinatra的全球救援和伐木异常

时间:2011-12-12 14:25:03

标签: ruby error-handling sinatra

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

2 个答案:

答案 0 :(得分:6)

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

not_found do
  'Site does not exist.'
end

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

error do
  "Application error. Pls try later."
end

可以通过sinatra.error中的request.env访问错误的详细信息,如下所示:

error do
  'An error occured: ' + request.env['sinatra.error'].message
end

答案 1 :(得分:5)

我无法在开发环境中开箱即用 - 为了让它工作,我必须在我的sinatra配置中将show_exceptions设置为false。

class BaseApp < Sinatra::Base

  configure { set :show_exceptions, false }

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

end

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