1

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

我将脚本中的超时设置为荒谬的秒数,因为我真的想获取文件,而不仅仅是在花费太长时间时继续前进。仍然有大量的秒我不断超时。

对此有最佳做法吗?

现在我用

  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超过 1 分 30 秒,但不知何故,它并没有以秒为单位使用我的超时时间。再次注意,我仅限于使用 Ruby 1.8.7

4

1 回答 1

4

不幸的是,这是有问题的。在 Ruby 1.9.x 中,open-uri-extendedopen可以接受read_timeout参数,并将其传递给 http 库。但是在您使用的 Ruby 1.8.x 中,此参数不可用。

因此,您需要直接使用 net/http,调用 start/get 并根据自己的喜好设置 read_timeout。如果您只使用 open-uri 包装器,则 read_timeout 仍为 60 秒,这比您想要的要短。

于 2011-10-04T03:51:25.527 回答