【问题标题】:How to get host name in rails 3 [duplicate]如何在rails 3中获取主机名[重复]
【发布时间】:2015-04-17 18:53:23
【问题描述】:

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

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

主机喜欢的应用程序网址

www.app.com

能否请您告诉我这对我来说是如何实现的。

提前致谢。

【问题讨论】:

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


【解决方案1】:

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

`hostname`.chomp

【讨论】:

    【解决方案2】:

    由于您无法在初始化程序中获取请求对象,因此您需要使用socket from the standard library。 Socket不是gem,所以不需要安装gem!

    中提琴:

    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
    

    【讨论】:

    • Socket.gethostname 在 config/initializers/file.rb 中返回“rails”,所以它对我不起作用。谢谢
    • 这是计算机的实际主机名(即与在 bash 中键入 hostname 的结果相同)。在您提出请求之前,您将无法确定主机名,因为任意数量的地址都可以指向同一主机。您应该考虑将此配置步骤移至控制器中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2012-04-03
    相关资源
    最近更新 更多