我们的应用程序规格为:ruby 2.6.5、rails 4.2.11、mysql 5.7.33(最大执行时间=1200000,20分钟)
对于海量数据,例如公司数据,有时我们在查询时需要花费很长时间。所以我决定用 Timeout::timeout
强制停止查询,但似乎不起作用。
这是示例代码
begin
max_time = 600 # 10minutes
Timeout::timeout(max_time) do
company = Company.where(location: 'West').last
end
rescue => e
company = nil
end
我们的期望是,如果查询仍在处理,它应该在10分钟内停止。但它会在20分钟后停止,mysql的最大超时时间。
我已经检查过了,它可以在5秒钟内停止
Timeout::timeout(5) { sleep(10) }
但这样,它仍然会在10秒内停止
Timeout::timeout(5) { Company.select('SLEEP(10)').limit(1) }
可以用rails停止查询吗?
1条答案
按热度按时间eqfvzcg81#
我已经解决了这个问题,
也许还有另一种方法。