web-dev-qa-db-fra.com

Obtenir le nom d'hôte du contrôleur Rails

J'essaie d'obtenir le nom d'hôte de la machine sur laquelle une application Rails s'exécute à partir du contrôleur.

Quelle serait la meilleure façon de faire cela en tenant compte du fait que cela devrait fonctionner à la fois sous Windows et sous Linux?

37
RailsSon

Il y a toujours:

require 'socket'
...
Socket.gethostname

Je n'ai pas de boîte Windows à portée de main pour tester cela, mais la documentation ne mentionne pas que c'est * nix spécifique.

Remarque: L'instruction require n'est pas nécessaire pour Rails 4 et probablement aussi pour les autres versions de Rails. Cela est nécessaire si vous faites du Ruby sans rails.

27
Wayne Conrad

Il suffit de regarder l'objet de requête dans votre contrôleur:

request.Host_with_port

ou si vous ne voulez pas le port, juste

request.Host
80
Wilhelm

Utilisez des backticks et la commande hostname

current_Host = `hostname`

Cela envoie la commande au shell et renvoie le nom d'hôte. Fonctionne au moins sur: Debian Linux, Windows, Solaris.

6
btelles

Si vous avez besoin du chemin de domaine complet du protocole au port, essayez:

full_domain_path = request.env['rack.url_scheme'] + '://' + request.Host_with_port
0
webaholik