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

时间:2011-10-04 01:15:12

标签: ruby open-uri

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

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

这是最好的做法吗?

现在我用

  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

现在tought超时设置为秒,这将使6000000方式超过1分30秒,但不知何故它不会在几秒钟内使用我的超时。再次注意,我只限于使用Ruby 1.8.7

1 个答案:

答案 0 :(得分:4)

不幸的是,这是有问题的。在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秒,这比您想要的短。