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