4

我正在尝试通过我的 Ruby on Rails 应用程序与第三方服务集成,该应用程序的地址只能由某些 DNS 服务器解析。

有没有办法告诉我的应用程序使用哪个 DNS 服务器进行查找?通用 Ruby 解决方案或 Heroku 特定解决方案都可以。

4

2 回答 2

6

找到了一种在应用范围内替换 DNS 解析器的方法。

创建config/initializers/dns.rb

class << Resolv

  def use_google_dns
    remove_const :DefaultResolver
    const_set :DefaultResolver, self.new(
      [Resolv::Hosts.new, Resolv::DNS.new(nameserver: ['8.8.8.8', '8.8.4.4'], search: ['mydns.com'], ndots: 1)]
    )
  end

end

Resolv.use_google_dns
require 'resolv-replace'

用 Ruby 2.0 测试过,但我相信它也适用于 1.9。文件位置指令是特定于 Rails 的,但代码应该适用于任何 Ruby 项目。

于 2013-09-19T17:57:16.500 回答
2

您不需要使用 Resolv::DefaultResolver.replace_resolvers 来取消定义常量:

Resolv::DefaultResolver.replace_resolvers([
  Resolv::Hosts.new, 
  Resolv::DNS.new(
    nameserver: ['8.8.8.8', '8.8.4.4'], 
    search: ['mydns.com'], 
    ndots: 1
  )
])

require 'resolv-replace'
于 2014-04-25T07:46:41.340 回答