防止从URL中打开大文件时发生超时
问题描述:
我正在写一个Ruby 1.8.7脚本,它必须从服务器请求非常大的XML文件(1到5MB),这非常慢(1分30秒1MB)。所请求的文件被写入磁盘。防止从URL中打开大文件时发生超时
我把我的脚本中的超时设置为一些荒谬的秒数,因为我真的想要获取该文件,而不是仅仅移动它,如果它需要太长时间。尽管如此,仍然有很多秒,我仍然得到超时。
对此有最佳做法吗?
现在我用
open(DIR + "" + number + "" + ".xml", 'wb') do |file|
begin
status = Timeout::timeout(6000000) do
file << open(url).read
end
rescue Timeout::Error => e
Rails.logger.info "Timeout for:" + number.to_s
end
end
现在因子评分超时设置以秒为这将使6000000
方式更多然后1min30sec,但不知何故,没有使用我的超时(秒)。再次请注意,我仅限于使用Ruby 1.8.7
答
不幸的是,这是有问题的。在Ruby 1.9.x中,open-uri-extended open
可以将read_timeout
参数传递给http库。但是,在您使用的Ruby 1.8.x中,此参数不可用。
所以,你需要直接使用net/http,调用start/get,并根据你的喜好设置read_timeout。如果你只是使用open-uri包装,read_timeout会保持60秒,比你想要的要短。