如何在rails 3中获取主机名

时间:2015-04-17 06:06:01

标签: ruby ruby-on-rails-3 ruby-on-rails-4

我在rails 3中遇到主机名的问题。

我需要在`config / initializers / file.rb中访问主机,但没有socket gem和任何gem。

主机就像app url

www.app.com

请你知道我怎么可能。

提前致谢。

2 个答案:

答案 0 :(得分:2)

由于您无法在初始值设定项中获取请求对象,因此您需要使用socket from the standard library。套接字不是宝石,所以不需要宝石安装!

Et viola:

require 'socket'
Socket.gethostname

这假设您的设备的主机名与您寻找的地址匹配(在终端中运行命令hostname以查看我的意思)。如果情况并非如此,那么在发出请求之前,您无法确定主机名,因为任意数量的地址都可以指向同一个应用程序。通过配置变量设置它可能更明智。

如果你真的想要动态的东西,你可以得到的最接近的是在控制器中执行初始化器。这是一个根据对服务器发出的第一个请求动态设置action_mailer.default_url_options的示例。

class ApplicationController < ActionController::Base
  before_action :set_mailer_host

  private

  def set_mailer_host
    if !ProMetrics::Application.config.action_mailer.default_url_options
      ProMetrics::Application.config.action_mailer.default_url_options = { host: request.host, port: request.port }
    end
  end
end

答案 1 :(得分:1)

也许只是一个简单的系统调用:

`hostname`.chomp