从Rails控制器获取主机名

50

我正在尝试从控制器中获取运行 rails 应用程序的计算机主机名。

考虑到它应该在 Windows 和 Linux 上都能工作,最好的方法是什么?

4个回答

99

你只需要在你的控制器中查看请求对象:

request.host_with_port

或者如果您不想要端口,只需

request.host

1
这对于解析URL等内容非常有帮助,但我认为这个特定的问题涉及到那台机器或操作系统的实际名称。 - taelor
这并不能帮助你获取主机的内部名称。 - phoet

31

常见的做法是:

require 'socket'
...
Socket.gethostname

我手头没有 Windows 电脑来测试这个,但文档中没有提到它是*nix特有的。

注意:对于 Rails 4 及其他版本,require语句并非必需。只有在不使用Rails的纯Ruby环境下才需要。


1
在Rails 4上看起来不再需要第一行了。 - ohaleck
@ohaleck 谢谢你指出这个问题。我已经修改了答案。 - Wayne Conrad

9

使用反引号和命令hostname

current_host = `hostname`

这将发送命令到 shell 并返回主机名。适用于至少以下系统:Debian Linux、Windows、Solaris。


8
如果你打算这样做,我建议通过初始化器缓存该值,而不是为每个请求执行fork()。 - George Armhold
同样适用于Mac OS。 - calasyr
在一般情况下,不必要地进行开销被认为是不良实践。 - Meredith

2
如果您需要从协议到端口的完整域路径,请尝试以下方法:
full_domain_path = request.env['rack.url_scheme'] + '://' + request.host_with_port

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接