首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Ruby on Rails中获取主机名或IP

在Ruby on Rails中获取主机名或IP
EN

Stack Overflow用户
提问于 2008-09-04 04:56:07
回答 12查看 96.7K关注 0票数 83

我正在维护一个Ruby on Rails应用程序,正在寻找一种简单的方法来找到我所在机器的主机名或IP地址(因为它是一个VM,新实例可能具有不同的主机名或IP地址)。在Ruby on Rails中有没有一种简单快捷的方法来做到这一点?

编辑:下面的答案是正确的,但Craig提供的澄清是有用的(请参阅答案中提供的链接):

下面的代码没有建立连接或发送任何数据包(到64.233.187.99,这是谷歌)。由于UDP是一种无状态协议,connect()只执行一个系统调用,该系统调用根据地址和应该绑定到哪个接口(以及IP地址)来确定如何路由数据包。

()返回一个数组,该数组包含套接字的系列(Addr)、本地端口和本地地址(这是我们想要的)。addr

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2008-09-04 00:37:31

来自coderrr.wordpress.com

代码语言:javascript
复制
require 'socket'

def local_ip
  orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true  # turn off reverse DNS resolution temporarily

  UDPSocket.open do |s|
    s.connect '64.233.187.99', 1
    s.addr.last
  end
ensure
  Socket.do_not_reverse_lookup = orig
end

# irb:0> local_ip
# => "192.168.0.127"
票数 51
EN

Stack Overflow用户

发布于 2009-10-08 04:00:30

主机名

在Ruby中获取主机名的一个简单方法是:

代码语言:javascript
复制
require 'socket'
hostname = Socket.gethostname

问题是,这依赖于主机知道它自己的名称,因为它使用gethostnameuname系统调用,因此它不能解决原始问题。

在功能上,这与hostname答案相同,不需要调用外部程序。主机名可能是完全限定的,也可能不是完全限定的,具体取决于计算机的配置。

IP地址

从Ruby1.9开始,您还可以使用套接字库来获取本地地址列表。ip_address_list返回AddrInfo对象的数组。如何从其中进行选择将取决于您想要做什么以及您有多少接口,但这里有一个示例,它简单地选择第一个非环回IPV4 IP地址作为字符串:

代码语言:javascript
复制
require 'socket'
ip_address = Socket.ip_address_list.find { |ai| ai.ipv4? && !ai.ipv4_loopback? }.ip_address
票数 141
EN

Stack Overflow用户

发布于 2008-09-03 21:19:17

试试这个:

代码语言:javascript
复制
host = `hostname`.strip # Get the hostname from the shell and removing trailing \n
puts host               # Output the hostname
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档