Ich teste ein Stück Code, um eine Reihe von Websites, die ich besitze, regelmäßig anzupingen, um sicherzugehen, dass sie verfügbar sind.
Ich verwende Rails und bisher habe ich diese hässliche Test-Aktion, die ich verwende, um es auszuprobieren (siehe unten).
Das Problem ist jedoch, dass es manchmal funktioniert und manchmal nicht ... manchmal läuft es durch den Code einfach gut, andere Zeiten, es scheint völlig zu ignorieren, die begin/rescue-Block ...
a. Ich brauche Hilfe, um herauszufinden, was das Problem ist b. Und die Überarbeitung, damit es anständig aussieht.
Wir wissen Ihre Hilfe sehr zu schätzen.
edit 1: Hier ist der aktualisierte Code, sorry, dass es so lange gedauert hat, pastie.org war seit gestern down http://pastie.org/927201
Seine immer noch die gleiche Sache ... Überspringen der begin-Block (weil es nur up_check_time aktualisiert) ... jedoch wenn eine der Seiten Zeiten aus, es tatsächlich aktualisiert alles (check_msg, Code usw.) richtig ... verwirrend, ja?
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