Есть несколько способов справиться с этим.
Open-Uri и Net :: HTTP имеют способы передачи значений времени ожидания, которые затем сообщают базовому сетевому стеку, как долго вы готовы ждать. Например, Mechanize позволяет вам получить его настройки при инициализации экземпляра, например:
mech = Mechanize.new { |agent|
agent.open_timeout = 5
agent.read_timeout = 5
}
Это все в документации для new
, но вам нужно будет просмотреть исходный код, чтобы узнать, какие переменные экземпляра вы можете получить.
Или вы можете использовать модуль Ruby's timeout
:
require 'timeout'
status = Timeout::timeout(5) {
# Something that should be interrupted if it takes too much time...
}