2008-09-30 24 views
13

Necesito obtener el nombre de host completamente expandido del host en el que se ejecuta mi script de Ruby. En Perl, he usado Sys :: Hostname :: Long con buenos resultados. Google parece sugerir que debería usar Socket.hostname en ruby, pero eso solo devuelve el nombre del nodo, no el nombre de host completo.¿Cómo puedo obtener el FQDN del host actual en Ruby?

Respuesta

20

Esto parece funcionar:

hostname = Socket.gethostbyname(Socket.gethostname).first 
+0

En Mac OS X esto parece devolver el nombre de host en minúscula: '$ ruby ​​-e 'pone Socket.gethostbyname (Socket.gethostname) .first' xin.local' en contraste con el comando bash 'hostname'' $ hostname XIN.local' – asmaier

-5

Podría ser un poco más simple => nombre de host = socket.gethostname

+1

Socket.gethostname no necesariamente devuelve un FQDN. – dvorak

5
hostname = Socket.gethostbyname(Socket.gethostname).first 

no es recomendable y sólo funcionará si la resolución DNS inversa está configurado correctamente arriba. This Facter bug tiene una explicación más larga si es necesario.

Si se lee el código facter, se dará cuenta de que algo sidestep the issue altogether by saying:

fqdn = hostname + domainname 

donde:

hostname = %[hostname] 
domainname = %[hostname -f] # minus the first element 

Esta es una suposición razonable de que no depende de la configuración de DNS (que puede ser externo a la caja).

+0

+1, esto al menos funcionará para * nix derivadas – Shirkrin

+2

Si el nombre de dominio no está configurado en la máquina, el nombre de host -f consultará también DNS. –

Cuestiones relacionadas