如何在Rails 3中获取主机名?

时间:2011-08-22 23:55:39

标签: ruby-on-rails-3

在Rails 2.3中,我可以使用HOST来获取我的主机名,但似乎它不再可用了。我可以用什么呢?

我只想要从我的机器运行代码时返回localhost:xxxx(使用真实端口号),并在生产中运行时http://www.mysite.com

3 个答案:

答案 0 :(得分:50)

您有几种选择:

  • 调用系统的hostname命令(假设它是* nix):`hostname`
  • 使用socket gem:

    require 'socket'

    Socket.gethostname

  • 如果您只是想知道请求访问的当前域:request.domain

<强>更新

从请求对象中,我们可以获取主机和端口,请查看以下方法:

  • request.protocol
  • request.host
  • request.port

您可以使用这些方法构建完整的URL。

根据我的个人经验,对于大多数项目,您可能为每个环境都有一个固定的域,并且通常在yaml文件中配置它(例如,要发送电子邮件并在电子邮件正文中使用带域名的URL,我们通常读取配置并为url helper设置选项。所以我通常只是阅读当前环境的urls配置并从代码中使用它们。

答案 1 :(得分:25)

在ActionController上使用以下方法:

request.host_with_port

答案 2 :(得分:19)

实际上很容易。我解决这个问题的最佳建议是你创建一个before_filter,它在ApplicationController.rb中的每个请求上设置它,如下所示:

 before_filter :set_mailer_host

  def set_mailer_host
    ActionMailer::Base.default_url_options[:host] = request.host_with_port
  end