Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何在rails 3中获取主机名_Ruby_Ruby On Rails 3_Ruby On Rails 4 - Fatal编程技术网

Ruby 如何在rails 3中获取主机名

Ruby 如何在rails 3中获取主机名,ruby,ruby-on-rails-3,ruby-on-rails-4,Ruby,Ruby On Rails 3,Ruby On Rails 4,我在rails 3中面临主机名问题 我需要访问`config/initializers/file.rb中的主机,但不需要套接字gem和任何gem 类似主机的应用程序url www.app.com 你能告诉我这对我有什么可能吗 提前谢谢 由于无法在初始值设定项中获取请求对象,因此需要使用。套接字不是gem,因此不需要安装gem 埃特·维奥拉: require 'socket' Socket.gethostname 这假定您的设备的主机名与您查找的地址匹配(在终端中运行命令hostname,以了

我在rails 3中面临主机名问题

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

类似主机的应用程序url

www.app.com
你能告诉我这对我有什么可能吗


提前谢谢

由于无法在初始值设定项中获取请求对象,因此需要使用。套接字不是gem,因此不需要安装gem

埃特·维奥拉:

require 'socket'
Socket.gethostname
这假定您的设备的主机名与您查找的地址匹配(在终端中运行命令
hostname
,以了解我的意思)。如果不是这样,那么在发出请求之前,您将无法确定主机名,因为任意数量的地址都可以指向同一个应用程序。通过配置变量进行设置可能更明智

如果您真的想要动态的东西,那么最接近的方法就是在控制器中执行初始值设定项。下面的示例将根据向服务器发出的第一个请求动态设置
action\u mailer.default\u url\u 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
class ApplicationController
由于无法在初始值设定项中获取请求对象,因此需要使用。套接字不是gem,因此不需要安装gem

埃特·维奥拉:

require 'socket'
Socket.gethostname
这假定您的设备的主机名与您查找的地址匹配(在终端中运行命令
hostname
,以了解我的意思)。如果不是这样,那么在发出请求之前,您将无法确定主机名,因为任意数量的地址都可以指向同一个应用程序。通过配置变量进行设置可能更明智

如果您真的想要动态的东西,那么最接近的方法就是在控制器中执行初始值设定项。下面的示例将根据向服务器发出的第一个请求动态设置
action\u mailer.default\u url\u 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
class ApplicationController
也许只是一个简单的系统调用:

`hostname`.chomp

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

`hostname`.chomp

@AndreyDeineko,我必须不带宝石。谢谢你在说什么宝石?我给你看的是你问题的副本,你有很多options@AndreyDeineko,我尝试在config/initializers/file.rb中获取它,因此当我尝试在这个文件中获取它时,它返回“rails”。@AndreyDeineko,我必须在没有任何gem的情况下获取它。谢谢你在说什么宝石?我给你看的是你问题的副本,你有很多options@AndreyDeineko,我试图在config/initializers/file.rb中获取它,所以当我尝试在这个文件中获取它时,它返回“rails”。Socket.gethostname在config/initializers/file.rb中返回“rails”,所以它对我不起作用。感谢这是计算机的实际主机名(即与在bash中键入
hostname
的结果相同)。在发出请求之前,您无法确定主机名,因为任意数量的地址都可以指向同一个主机。您应该考虑将这个配置步骤移到控制器.SOCKE.GETHOSTNORE中返回CONFIG/IGILALIZIES/FIL.RB中的“Rails”,这样它就不适合我了。感谢这是计算机的实际主机名(即与在bash中键入
hostname
的结果相同)。在发出请求之前,您无法确定主机名,因为任意数量的地址都可以指向同一个主机。应该考虑将这个配置步骤移到控制器中。