从URL打开大文件时防止超时

我正在编写一个Ruby 1.8.7脚本,它必须从服务器请求非常大的XML文件(1 – 5MB),速度很慢(1分30秒1分钟)。 请求的文件将写入磁盘。

我将脚本中的超时设置为一些荒谬的秒,因为我真的想要获取文件,而不是仅仅在需要太长时间时继续运行。 仍然有很长的秒数我一直在超时。

这是最好的做法吗?

现在我用

open(DIR + "" + number + "" + ".xml", 'wb') do |file| begin status = Timeout::timeout(6000000) do file < e Rails.logger.info "Timeout for:" + number.to_s end end 

现在tought超时设置为秒,这将使6000000方式超过1分30秒,但不知何故它没有使用我的超时秒。 再次注意,我只限于使用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秒,这比您想要的短。