Время ожидания Rails open() истекло. Как убрать ограничение по времени?

Следующий код дает мне Timeout::Error

open("#{local_file}", 'wb') do |file|
  file << open(remote_file_url).read
end

Как увеличить время ожидания? Загружаемый файл большой и обычно занимает более 2 минут в браузере.


person Jacob    schedule 14.11.2011    source источник
comment
Возможно, этот ответ поможет: stackoverflow.com/questions/7642364/   -  person Miguel Pinto    schedule 14.11.2011
comment
Я пробовал следующее, но все равно безрезультатно: open("#{coupons_file}", 'wb', {:timeout => 9999999999}), а также open("#{coupons_file}", 'wb', {:read_timeout => 9999999999}) -- я использую Ruby 1.9.x.   -  person Jacob    schedule 14.11.2011


Ответы (1)


Я заметил, что вы открываете удаленный файл «remote_file_url». Я предполагаю, что это то, откуда происходит тайм-аут.

Для начала я написал класс соединения net/http, который включает код тайм-аута, который вы можете использовать или смоделировать. https://github.com/bf4/Notes/blob/master/code/connection.rb (я полагаю, что открытый метод использует net/http)

Вы также можете получить ответ в блоке

например что-то типа

local_file, url, timeout = 'foo', 'http://www.example.com/index.html', 60
File.open(local_file, 'wb') do |file|
  uri = URI.parse(url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.open_timeout = timeout 
  http.read_timeout = timeout 
  http.use_ssl = (uri.scheme == 'https')
  http.request_get(uri.request_uri) do |response|
    response.read_body do |segment|
      file.write(segment)
    end
  end
end

см. http://www.ruby-doc.org/stdlib-1.8.7/libdoc/net/http/rdoc/Net/HTTPResponse.html и http://www.ruby-doc.org/stdlib-1.8.7/libdoc/net/http/rdoc/Net/HTTP.html

person BF4    schedule 15.11.2011