gpt4 book ai didi

ruby-on-rails - ping 网站的代码有时有效

转载 作者:数据小太阳 更新时间:2023-10-29 07:17:25 25 4
gpt4 key购买 nike

我正在测试一段代码,定期对我拥有的一堆网站执行 ping 操作,以确保它们正常运行。

我正在使用 Rails,到目前为止,我有这个可怕的测试操作,我正在使用它来尝试(见下文)。
但问题是,有时它可以工作,有时它不会……有时它可以很好地运行代码,而其他时候,它似乎完全忽略了开始/救援 block ……

一个。我需要帮助找出问题所在b.并对其进行重构,使其看起来体面。

非常感谢您的帮助。

编辑 1:这是更新后的代码,抱歉花了这么长时间,pastie.org 从昨天开始就宕机了 http://pastie.org/927201

它仍然在做同样的事情......跳过开始 block (因为它只更新 up_check_time)......但是如果其中一个站点超时,它实际上会正确更新所有内容(check_msg,代码等)......令人困惑,是吗?

require 'net/http'
require 'uri'

def ping
@sites = NewsSource.all

@sites.each do |site|
if site.uri and !site.uri.empty?
uri = URI.parse(site.uri)
response = nil
path = uri.path.blank? ? '/' : uri.path
path = uri.query.blank? ? path : "#{path}?#{uri.query}"

begin
Net::HTTP.start(uri.host, uri.port) {|http|
http.open_timeout = 30
http.read_timeout = 30
response = http.head(path)
}

if response.code.eql?('200') or response.code.eql?('301') or response.code.eql?('302')
site.up = true
else
site.up = false
end

site.up_check_msg = response.message
site.up_check_code = response.code
rescue Errno::EBADF
rescue Timeout::Error
site.up = false
site.up_check_msg = 'timeout'
site.up_check_code = '408'
end
site.up_check_time = 0.seconds.ago
site.save
end
end
end

最佳答案

Errno::EBADF 当前有一个空的 rescue block ,因此如果引发该异常,则不会设置 site.upfalse

此外,还有一些其他的小改进:

代替 if site.uri and !site.uri.empty? 你可以使用:

next if site.uri.nil? or site.uri.empty?

跳过 each 循环的迭代并避免将代码缩进一个额外的级别。

和:

if response.code.eql?('200') or response.code.eql?('301') or response.code.eql?('302')
site.up = true
else
site.up = false
end

可以写得更简洁:

site.up = ['200', '301', '302'].include? response.code

如果您使用这些技巧中的一些来整理代码,那么它可能有助于缩小问题范围。

关于ruby-on-rails - ping 网站的代码有时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2672849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com