Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > On error break


Автор: segods 26.2.2008, 01:14
Прога обращается к серверам в сети, если они не доступны, долго ждет, а потом вылетает с ошибкой.
Нужно что бы в таком случае вместо вылета программы, просто прекращалось выполнение функции(типа on error break), и выподнялось следущее действие.

И еще как поменять timeout, очень он большой по умолчанию.
Для работы с сетью юзаю:
Код

    @dir="/" if @dir.empty?
    h = Net::HTTP.new @host,80
    resp,@data=h.get @dir+@page,nil
    rescue=>err;puts "Error: #{err}  #{host+dir+page}";
    unless resp.code=="200"; return; end


Кто сталкивался с подобной ситуацией или просто хорошо шарит в Ruby посовейтуте что над прописать?...

Автор: segods 27.2.2008, 20:45
Такой форум умный, а никто помочь не может....

Заключение h = Net::HTTP.new @host,80 в if не помогает. Да, он перестает вылетать от ошибок в DNS-именах и доступности серверов.
Но если сервер ответит криво то все равно вылетает....

Автор: avsej 11.7.2008, 16:02
Что значит вылетает? Этот пример завершает свою работу после четырех неудачных попыток

Код

require 'open-uri'

host = 'www.google.com'
dir = 'codesearch'

uri = "http://#{host}/#{dir}"

puts "Connecting to #{uri}"

tries = 0       # How many times have we tried to read the URL
begin           # This is where a retry begins
  tries += 1    # Try to print out the contents of a URL
  open(uri) {|f| puts f.readlines }
rescue OpenURI::HTTPError => e  # If we get an HTTP error
  puts e.message                # Print the error message
  if (tries < 4)                # If we haven't tried 4 times yet...
    sleep(2**tries)             # Wait for 2, 4, or 8 seconds
    retry                       # And then try again!
  end
end


Пример из книги
  The Ruby Programming Language 
  by David Flanagan; Yukihiro Matsumoto 
  Publisher: O'Reilly 
  Pub Date: January 15, 2008 
  Print ISBN-10: 0-596-51617-7 
  Print ISBN-13: 978-0-59-651617-8 
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)