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 回答