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 

你应该提供一个超时并解救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 

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