Rails ping 网站并评估 Net::HTTP 响应

Rails ping website and evaluate Net::HTTP response

我正在做一个简单的方法来检查网站是否正常运行,这是我的 Ping 模型,其中包含我要检查的几个地址

require 'net/http'

    def self.check
        pings = Ping.all
        pings.each do |p|
          http = Net::HTTP.new(p.address,80)
          response = http.request_get('/')
          if response.message == ( 'OK' or 'Found')
            puts 'up!!'
          end
        end
      end

我只是检查响应消息是 "OK" 还是 "Found" 但我的 or 语句只检查 "OK".

还有这种检查方法好吗?

response.message == ( 'OK' or 'Found')不会按照你的想法去做。

> ( 'OK' or 'Found')
=> "OK"

这就是它只检查 "OK" 的原因。恕我直言,您不应该检查消息,因为它可能会有所不同。检查 200 或 300 范围内任何内容的响应代码。

只要您不检查很多网站,上述内容就可以了。如果你是,它可能会开始需要一段时间,因为它们是连续的。

您可能还想添加超时,这样如果它尝试 ping 并失败 20 秒,请考虑站点关闭。

我也知道一些网站会 return 400 无法识别的用户代理错误。因此,您通过浏览器看到的内容可能根本不是您的脚本正在运行的内容。

正如@PhilipHallstrom 所指出的,您的 if 声明并没有按照您的想法行事。 (if a== (b or c) != if a == b || a == c ...还有区分大小写的问题。

尝试使用不区分大小写配置的正则表达式(末尾的 i):

  response.message.match /^(ok|found)$/i

...虽然...

我支持@PhilipHallstrom 对代码的保留意见。

数字代码可能会更好,应用程序响应能力应该是设计中的一个因素(我假设您已涵盖)...

我可能会选择:

  response.code >= 200 && response.code < 400