Hola amigos de RoR.
Tengo el siguiente problema:
sucede que estoy haciendo un redirect en un controlador, algo parecido a
esto:
def
…
…
redirect_to “www.sitio.com”
end
el problema es que si el sitio no es en linea funcionando el navegador
muestra “Sitio no encontrado y otras cosas”, es justamento esto lo que
quiero evitar, y aqui va mi pregunta habra algun metodo en Ruby para
saber si el sitio(www.sitio.com) esta en linea actualmente, algo
parecido a esto
def
…
…
if MiSitio(www.sitio.com).enlinea
redirect_to “www.sitio.com”
else
render :text => “Un mensaje”
end
end
Quiero hacer esto para que solo en caso de el sitio este en linea se
haga el redirect, sino lo esta mostrar algun mensaje o mostrar otro
action local.
Les estare agradecido por cualquier sugerencia.
Prueba esto:
req = Net::HTTP::Get.new(‘www.sitio.com’)
y luego compruebas el status de req, a ver si es Net::HTTPSuccess
s2
Rcarlos Rcarlos_ag wrote:
Hola amigos de RoR.
Tengo el siguiente problema:
sucede que estoy haciendo un redirect en un controlador, algo parecido a
esto:
def
…
…
redirect_to “www.sitio.com”
end
el problema es que si el sitio no es en linea funcionando el navegador
muestra “Sitio no encontrado y otras cosas”, es justamento esto lo que
quiero evitar, y aqui va mi pregunta habra algun metodo en Ruby para
saber si el sitio(www.sitio.com) esta en linea actualmente, algo
parecido a esto
def
…
…
if MiSitio(www.sitio.com).enlinea
redirect_to “www.sitio.com”
else
render :text => “Un mensaje”
end
end
Quiero hacer esto para que solo en caso de el sitio este en linea se
haga el redirect, sino lo esta mostrar algun mensaje o mostrar otro
action local.
Les estare agradecido por cualquier sugerencia.
Muchas gracias por responder Fernando, estube trantando de hacer
funcionar lo me sugieres, el codigo que escribi es el siguiente:
req = Net::HTTP::Get.new(‘http://www.sitio.com’)
case req.status
when Net::HTTPSuccess
puts ‘esta en linea’
else
puts ‘NO ESTA EN LINEA’
end
El problema que tengo es que no existe el metodo status, por tanto sale
un error, espero que me puedan ayudar a solucionar este problema.
Gracias por la ayuda Fernando al fin lo pude resolver, aqui pongo la
solucion por si alguien lo necesita algun dia.
begin
url = URI.parse(“www.sitio.com”)
req = Net::HTTP::Get.new(url.path)
http_resp = Net::HTTP.new(url.host, url.port).start {}
puts “El sitio esta en linea”
rescue
puts “El sitio NO esta en linea”
end
Yo es que esto no lo he hecho nunca, lo que sà he hecho son POSTs de
XMLs en vez de GETs de HTML; pero aunque no funciona exactamente igual,
te pego mi código, y con eso busca por Google y por las clases
correspondientes, a ver si lo sacas…
url = URI.parse('http://www.sitio.com')
req = Net::HTTP::Post.new(url.path)
req.content_type = 'text/xml'
req.basic_auth 'usr', 'pw'
req.body = xml
http_resp = Net::HTTP.new(url.host, url.port).start {|http|
http.request(req) }
# Procesar respuesta Net:OK
case http_resp
when Net::HTTPSuccess, Net::HTTPRedirection
respuesta = Hash.from_xml(http_resp.body)['token']['response']
return respuesta
# Procesar respuesta Net:ERROR
else
fallo_conexion()
return false
end
(obviamente, lo de basic_auth no lo necesitas en tu caso… lo dejo ahÃ
por si alguien quiere hacer lo mismo que yo).
s2