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

ale*_*lex 26 ruby-on-rails-3

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

localhost:xxxx当我从机器运行代码http://www.mysite.com时,以及在生产中运行代码时,我只想要返回(带有真实端口号)的东西.

Jam*_*hen 50

你有几个选择:

  • call system的hostname命令(假设它是*nix):`hostname`
  • 使用socket gem:

    require 'socket'

    Socket.gethostname

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

更新

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

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

您可以从这些方法构建完整的URL.

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


IAm*_*NaN 25

在ActionController上使用以下方法:

request.host_with_port
Run Code Online (Sandbox Code Playgroud)


jim*_*gic 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
Run Code Online (Sandbox Code Playgroud)