我有一个像这样的块:
begin
# some SQL request
rescue Mysql::Error => e
logputs "Mysql::Error occurred, retrying in 10s: #{e.message}"
sleep 10
retry
end
但是当发生“与MySQL服务器失去连接”错误时,此块无法捕获并重试(MySQL服务器已重新启动)。知道我怎么能正确捕捉这个例外吗?
谢谢!
答案 0 :(得分:1)
从你的评论看起来发生的事情是抛出一个Mysql :: Error异常,然后由ActiveRecord捕获,然后抛出一个ActiveRecord :: StatementInvalid异常(在这种情况下这不是非常有用的行为!)
我想改变你的救援方式以捕获AR :: StatementInvalid异常并看看它对你有什么作用。
答案 1 :(得分:0)
你确定你正在拯救正确的例外吗?
尝试使用以下代码:
rescue StandardError => e
puts e
那应该输出任何引发的异常,更重要的是你将能够看到特定的类型。然后,您可以将救援声明调整为更具体。