2011-10-04 74 views
1

我正在寫一個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

回答

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