Come avrei fatto una dichiarazione, mentre con rete / http se mantiene timeout?

StackOverflow https://stackoverflow.com/questions/8320315

  •  25-10-2019
  •  | 
  •  

Domanda

Ho il seguente codice:

require 'rubygems'
require 'net/http'
require 'uri'
url = URI.parse('http://servername.tld/up.txt')
response = Net::HTTP.get_response(url)

@yes = response.body
until @yes == "yes"
  puts "It's down"
end

Il contenuto di /up.txt è

Si

Tuttavia, mantiene timeout quando (cioè il server up.txt hosting) è giù, con questo:

/home/jrg/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/net/http.rb:644:in `inizializzare ': Connection refused - connect (2) ( errno :: ECONNREFUSED)

correlati, ma non ha aiutato: Perché ottengo "Errno :: ECONNREFUSED" con ' net / http' in Rails?

Devo considerare l'utilizzo di qualcosa di diverso da Net::HTTP?

È stato utile?

Soluzione

Basta mettere la parte che sta gettando l'eccezione in un blocco di salvataggio.

def up?(url)
  begin
    Net::HTTP.get_response(url).body == "yes"
  rescue Errno::ECONNREFUSED
    false
  end
end

until up?(url)
  puts "It's down"
end

Altri suggerimenti

Come si potrebbe open-uri, è molto più ordinata:

require 'open-uri'
sleep 10 until response = open(url).read rescue nil
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top