Я пытаюсь создать фрагмент кода, который ищет страницы с тайм-аутом, используя Mechanize и Ruby. Мой тестовый стенд включает одну страницу, специально написанную для тайм-аута, и 3 страницы, которые работают нормально. Вот код:
urls = ['http://example.com/regular.php','http://example.com/regular2.php','http://example.com/regular3.php', 'http://example.com/tmeout.php']
m = Mechanize.new
urls.each do |url|
begin
status = Timeout::timeout(5.0) {
m.get(url)
}
rescue Timeout::Error
puts "TIMED OUT: " + url
end
end
Когда URL-адрес тайм-аута является последним элементом в списке, это прекрасно работает. Ссылка timeout
выводится на консоль. Однако, когда ссылка timeout
не является последним элементом в списке (например, я помещаю его первым в ссылку), ссылка timeout
печатается на консоли, однако некоторые ссылки regular
также печатаются на консоли. Это также представляется недетерминированным. Каждый раз, когда я перезапускаю его, на консоль выводится другой набор ссылок.
Может кто-нибудь сказать мне, почему это так и какое исправление доступно? Я заметил, что создание нового mechanize
для каждой итерации решает проблему - однако это не вариант, потому что другие части программы используют файлы cookie из m
, которые будут сброшены при создании нового экземпляра. Какие-нибудь исправления?