Ruby检查网站是否存在

时间:2013-05-08 15:09:50

标签: ruby

好的,我正在检查我的服务器是否正在运行。只要端口正确,它就可以工作。但是,如果我将端口设置为一个我知道并不是例外,它完全会跳过我的常规操作。以下示例运行正常。但是将端口号更改为99,它会完全跳过if。我认为它应该属于其他部分。

url = URI.parse("http://www.google.com/")
url.port = 80
req = Net::HTTP.new(url.host, url.port)
res = req.request_head(url.path)

if res.code == "200"
    #do something
else
    #do something else
end

1 个答案:

答案 0 :(得分:5)

您应提供超时并救助SocketErrorTimeout::Error

require "net/http"
def check_server(server, port)
  begin
    http = Net::HTTP.start(server, port, {open_timeout: 5, read_timeout: 5})
    begin
      response = http.head("/")
      if response.code == "200"
        # everything fine
      else
        # unexpected status code
      end
    rescue Timeout::Error
      # timeout reading from server
    end
  rescue Timeout::Error
    # timeout connecting to server
  rescue SocketError
    # unknown server
  end
end

如果您只想检查服务器是否已启动,可以简化:

require "net/http"
def up?(server, port)
  http = Net::HTTP.start(server, port, {open_timeout: 5, read_timeout: 5})
  response = http.head("/")
  response.code == "200"
rescue Timeout::Error, SocketError
  false
end

如果true返回/状态代码,则返回200,否则返回false,即其他状态代码,超时和典型错误条件。