Récupérer le nom d'hôte et l'adresse IP - Ruby on Rails

Je suis en train de maintenir une application Ruby on Rails et je cherche un moyen facile de trouver le nom d’hôte ou l’adresse IP de la machine sur laquelle je me trouve (puisqu’il s’agit d’une VM et que les nouvelles instances peuvent avoir des noms d’hôtes ou des adresses IP différents). Existe-t-il un moyen rapide et facile de faire cela en Ruby on Rails ?

Nom d’hôte

Une façon simple d’obtenir le nom d’hôte en Ruby est la suivante :

require 'socket'
hostname = Socket.gethostname

Adresse IP

Depuis ruby 1.9, vous pouvez également utiliser la bibliothèque Socket pour obtenir une liste d’adresses locales. ip_address_list renvoie un tableau d’objets de AddrInfo. Le choix de ces objets dépend de ce que vous voulez faire et du nombre d’interfaces dont vous disposez:

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

Le code suivant vous permet de récupérer le nom d’hôte et l’adresse IP dans Ruby on Rails.

require 'socket'

def local_ip
  orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true  # désactiver temporairement la résolution DNS inverse

  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.2"

Essayez ça :

host = `hostname`.strip
puts host