Вы можете создать другой поток, чтобы следить за ходом загрузки и завершать работу приложения, если загрузка не отвечает. Поскольку Net :: SFTP позволяет передавать собственный обработчик методу download!
, вы можете настроить поток наблюдателя следующим образом:
class CustomHandler
def extend_time
@crash_time = Time.now + 30
end
# called when downloading has started
def on_open(downloader, file)
extend_time
downloader_thread = Thread.current
@watcher_thread = Thread.new{
while true do
if Time.now > @crash_time
downloader_thread.raise "Downloading appears unresponsive. Network disconnected?"
end
sleep 5
end
}
end
# called when new bytes are downloaded
def on_get(downloader, file, offset, data)
extend_time
end
# called when downloading is completed
def on_close(downloader, file)
@watcher_thread.exit
end
end
И не забудьте передать пользовательский обработчик следующим образом:
sftp.download!(remote_path, local_path, :progress => CustomHandler.new)