Как я могу получить полное доменное имя текущего хоста в Ruby?

Мне нужно получить полностью развернутое имя хоста, на котором работает мой скрипт Ruby. В Perl я использовал Sys :: Hostname :: Long с хорошими результатами. Кажется, Google предлагает мне использовать Socket.hostname в ruby, но это возвращает только имя узла, а не полное имя хоста.


person dvorak    schedule 30.09.2008    source источник


Ответы (3)


Кажется, это работает:

hostname = Socket.gethostbyname(Socket.gethostname).first 
person dvorak    schedule 30.09.2008
comment
В Mac OS X это, кажется, возвращает имя хоста в нижнем регистре: $ruby -e 'puts Socket.gethostbyname(Socket.gethostname).first' xin.local в отличие от команды bash 'hostname' $ hostname XIN.local - person asmaier; 19.05.2014
comment
это решение, поскольку ruby ​​2.7+ устарело - person VP.; 10.06.2021

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

не рекомендуется и будет работать только при правильной настройке обратного разрешения DNS. У этой ошибки Facter есть более подробное объяснение, если это необходимо.

Если вы прочитаете код фактера, то заметите, что они несколько вообще обходят проблему, говоря:

fqdn = hostname + domainname

куда:

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

Это разумное предположение, которое не зависит от настройки DNS (который может быть внешним по отношению к устройству).

person Alexis Lê-Quôc    schedule 20.08.2012
comment
Если имя домена не установлено на машине, hostname -f также будет запрашивать DNS. - person James Cape; 18.09.2012

Может быть немного проще => hostname = Socket.gethostname

person charley hine    schedule 01.12.2009
comment
Socket.gethostname не обязательно возвращает полное доменное имя. - person dvorak; 04.12.2009