怎么在RubyonRails中获取主机名或IP?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

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

提问于
用户回答回答于

来自coderrr.wordpress.com

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"
用户回答回答于

主机名

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

require 'socket'
hostname = Socket.gethostname

值得注意的是,这依赖于主机知道自己的名字,因为它使用gethostname或者uname系统调用,所以它不能用于原始问题。

在功能上,这与hostname相同,无需调用外部程序。根据机器的配置,主机名可能不是完全合格的。

IP地址

从ruby 1.9开始,也可以使用Socket库来获取本地地址列表。 ip_address_list返回一个AddrInfo对象数组。有一个例子,它简单地选择第一个非回送IPV4 IP地址作为字符串:

require 'socket'
ip_address = Socket.ip_address_list.find { |ai| ai.ipv4? && !ai.ipv4_loopback? }.ip_address

扫码关注云+社区