我正在尝试通过我的 Ruby on Rails 应用程序与第三方服务集成,该应用程序的地址只能由某些 DNS 服务器解析。
有没有办法告诉我的应用程序使用哪个 DNS 服务器进行查找?通用 Ruby 解决方案或 Heroku 特定解决方案都可以。
我正在尝试通过我的 Ruby on Rails 应用程序与第三方服务集成,该应用程序的地址只能由某些 DNS 服务器解析。
有没有办法告诉我的应用程序使用哪个 DNS 服务器进行查找?通用 Ruby 解决方案或 Heroku 特定解决方案都可以。
找到了一种在应用范围内替换 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 项目。
您不需要使用 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'