【问题标题】:How can I get the FQDN of the current host in Ruby?如何在 Ruby 中获取当前主机的 FQDN?
【发布时间】:2010-09-14 04:08:07
【问题描述】:

我需要获取运行 Ruby 脚本的主机的完全扩展主机名。在 Perl 中,我使用了 Sys::Hostname::Long 并取得了不错的效果。 Google 似乎建议我应该在 ruby​​ 中使用 Socket.hostname,但这只是返回节点名,而不是完整的主机名。

【问题讨论】:

    标签: ruby fqdn


    【解决方案1】:
    hostname = Socket.gethostbyname(Socket.gethostname).first
    

    不推荐,只有在正确设置反向 DNS 解析时才有效。如果需要,This Facter bug 有更长的解释。

    如果您阅读因子代码,您会注意到它们有点sidestep the issue altogether by saying

    fqdn = hostname + domainname
    

    地点:

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

    这是一个合理的假设,不依赖于 DNS 的设置(可能在盒子外部)。

    【讨论】:

    • 如果机器上没有设置域名,hostname -f 也会查询DNS。
    【解决方案2】:

    可以简单一点 => 主机名 = Socket.gethostname

    【讨论】:

    • Socket.gethostname 不一定返回 FQDN。
    【解决方案3】:

    这似乎有效:

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

    【讨论】:

    • 在 Mac OS X 上,这似乎以小写形式返回主机名:$ruby -e 'puts Socket.gethostbyname(Socket.gethostname).first' xin.local 与 bash 'hostname' 命令 $ hostname XIN.local 形成对比
    • 此解决方案自 ruby​​ 2.7+ 起已弃用
    • 新的解决方案是什么?
    猜你喜欢
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 2011-11-22
    相关资源
    最近更新 更多