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?
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.
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
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.
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