【问题标题】:Get hostname from Rails controller从 Rails 控制器获取主机名
【发布时间】:2010-02-05 16:57:11
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails hostname


    【解决方案1】:

    您所要做的就是查看控制器中的请求对象:

    request.host_with_port
    

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

    request.host
    

    【讨论】:

    • 这对您尝试解析 URL 等很有帮助,但我认为这个特定问题与该机器或操作系统的实际名称有关。
    • 如果您想获取主机的内部名称,这对您没有帮助
    【解决方案2】:

    总会有的:

    require 'socket'
    ...
    Socket.gethostname
    

    我没有方便的 Windows 盒子来测试它,但文档没有提到它是 *nix 特定的。

    注意:对于 Rails 4 和其他 Rails 版本,require 语句不是必需的。如果你在做没有 Rails 的普通 Ruby,它是必需的。

    【讨论】:

    • 在 Rails 4 上看起来不再需要第一行了。
    • @ohaleck 感谢您指出这一点。我已经修改了答案。
    【解决方案3】:

    使用反引号和命令hostname

    current_host = `hostname`
    

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

    【讨论】:

    • 如果您要这样做,我建议您通过初始化程序缓存值,而不是为每个请求执行 fork()。
    • 也适用于 Mac OS。
    • 一般来说,当你不需要的时候出击被认为是不好的做法。
    【解决方案4】:

    如果您需要从协议到端口的完整域路径,请尝试:

    full_domain_path = request.env['rack.url_scheme'] + '://' + request.host_with_port
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多