我在rails 3中遇到主机名的问题。
我需要在`config / initializers / file.rb中访问主机,但没有socket gem和任何gem。
主机就像app url
www.app.com
请你知道我怎么可能。
提前致谢。
答案 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