Estoy probando un fragmento de código para hacer ping a un grupo de sitios web que poseo regularmente, para asegurarme de que estén activos.código para hacer ping a sitios web funciona a veces
Estoy usando raíles y hasta ahora tengo esta acción de prueba horrible que estoy utilizando para probarlo (ver a continuación).
El problema, sin embargo, es que a veces funciona, y otras veces no ... a veces funciona perfectamente con el código, otras veces parece ignorar por completo el bloque de inicio/rescate ...
a. Necesito ayuda para averiguar cuál es el problema b. Y refacturando esto para que se vea respetable.
Su ayuda es muy apreciada.
edición 1: Aquí está el código actualizado, siento haber tardado tanto, pastie.org se redujo desde ayer http://pastie.org/927201
Su todavía haciendo lo mismo ... sin esperar bloque begin (ya que sólo actualizaciones up_check_time) ... sin embargo, si uno de los sitios se agota, realmente actualiza todo (check_msg, código, etc.) correctamente ... confuso, ¿sí?
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
AGRADABLE !!! Las ediciones ... volverán a publicarse un poco, pero tengo una pregunta más? ¿Es posible rescatar múltiples excepciones a la vez? Eso es lo que estaba tratando de hacer (torpemente) con los bloques de rescate ... – concept47
Sí, pensé que podría haber estado tratando de rescatar múltiples excepciones a la vez. Simplemente no estaba seguro. Para hacerlo, sepáralos con una coma, p. 'rescatar a Errno :: EBADF, Timeout :: Error' – mikej
Gracias, Mike, lo descubrí ayer al ver cómo lo hicieron las declaraciones de casos de Ruby, pero gracias de todos modos: D. Aquí está el código actualizado ... http://pastie.org/927201. Sigue haciendo lo mismo ... omitiendo el bloque begin (lo digo porque generalmente solo actualiza up_check_time) ... sin embargo, si uno de los sitios se agota, realmente actualiza todo (check_msg, código, etc.) correctamente ... confuso, ¿sí? – concept47