防止从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秒,比你想要的要短。