1

次のコードがあります。

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

の内容は/up.txt

はい

up.txtただし、次のように、サーバー (つまり、サーバー ホスティング) がダウンしている場合はタイムアウトし続けます。

/home/jrg/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/net/http.rb:644:in `initialize': 接続が拒否されました - connect(2) (Errno::サービス拒否)

関連するが役に立たなかった: Rails で「net/http」を使用すると「Errno::ECONNREFUSED」が表示されるのはなぜですか?

以外のものを使用することを検討する必要がありNet::HTTPますか?

4

2 に答える 2

10

例外をスローしている部分をレスキュー ブロックに入れるだけです。

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
于 2011-11-30T02:33:59.377 に答える
2

あなたはopen-uriが好きかもしれません、それはずっときれいです:

require 'open-uri'
sleep 10 until response = open(url).read rescue nil
于 2011-11-30T03:01:15.340 に答える