在Rails 2.3中,我可以使用HOST来获取我的主机名,但似乎它不再可用了。我可以用什么呢?
我只想要从我的机器运行代码时返回localhost:xxxx
(使用真实端口号),并在生产中运行时http://www.mysite.com
。
答案 0 :(得分:50)
您有几种选择:
`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