【发布时间】:2014-08-14 02:37:13
【问题描述】:
我有一个简单的 Sinatra 休息,但我无法捕获错误。我也承认我对 Ruby 和 Sinatra 还很陌生。
当我在 post 端点提出错误时,我想报告传入的文档。我需要 1)处理发布结果中的错误(我可以访问 @incoming)或 2)将传入的文档传递给错误并在那里报告。
什么是更好的选择,选项 1 或选项 2?
- 如果我继续使用选项 1,我如何防止错误出现错误(现在似乎正在这样做)
- 如果我转到选项 2,如何将传入传递给错误?
下面是我的代码示例:
post ('/result') do
begin
@incoming = JSON.parse(request.body.read)
//do something that causes an error
rescue
e = env['sinatra.error']
url = request.url
ip = request.ip
@actlogpassblock = { :message => e.message,
:path => url,
:ip => ip,
:timestamp => Time.new,
:type => "500",
:sub => "RES",
:payload => @incoming
}
action_log.insert(@actlogpassblock)
status 500
end
end
error do
status 500
e = env['sinatra.error']
url = request.url
ip = request.ip
backtrace = "Application error\n#{e}\n#{e.backtrace.join("\n")}"
@actlogpassblock = { :message => e.message,
:path => url,
:ip => ip,
:timestamp => Time.new,
:type => "500",
:backtrace => backtrace
}
action_log.insert(@actlogpassblock)
{:result => 'Ah Shucks! Something went wrong'}.to_json
end
【问题讨论】:
标签: ruby error-handling sinatra