Запрет тайм-аута при открытии больших файлов с URL - PullRequest
1 голос
/ 04 октября 2011

Я пишу скрипт на Ruby 1.8.7, который должен запрашивать действительно большие XML-файлы (1–5 МБ) с сервера, который довольно медленный (1 мин 30 с для 1 МБ). Запрашиваемый файл записывается на диск.

Я установил тайм-аут в своем скрипте на несколько смехотворных секунд, поскольку я действительно хочу получить файл, а не просто двигаться дальше, если это занимает слишком много времени. Все еще с большим количеством секунд я продолжаю получать тайм-ауты.

Есть ли лучшая практика для этого?

сейчас я использую

  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

1 Ответ

4 голосов
/ 04 октября 2011

К сожалению, это проблематично.В Ruby 1.9.x open-uri-extended open может принимать параметр read_timeout, который он передает в библиотеку http.Но в Ruby 1.8.x, который вы используете, этот параметр недоступен.

Итак, вам нужно напрямую использовать net / http, вызвать start / get there и установить read_timeout по своему вкусу.Если вы просто используете оболочку open-uri, read_timeout остается 60 секунд, что меньше, чем вы хотите.

...