好的,我正在检查我的服务器是否正在运行。只要端口正确,它就可以工作。但是,如果我将端口设置为一个我知道并不是例外,它完全会跳过我的常规操作。以下示例运行正常。但是将端口号更改为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
答案 0 :(得分:5)
您应提供超时并救助SocketError
和Timeout::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
,即其他状态代码,超时和典型错误条件。