我们将Ruby中的rest-client gem用于REST API的自动化测试。但是我注意到,它在发出的每个请求中都对主机名进行DNS查找。在本地环境中,如果使用“ localhost”,则测试运行速度很快,但是,如果使用正确的主机名,则它们将花费2.5倍的时间,从而执行大量的DNS查找。
我认为这个问题与REST客户端无关,而与Ruby网络有关。我尝试要求使用“ resolv”和“ resolv-replace”,但它们没有帮助。“ dig”报告DNS查询的TTL为1小时。
有没有办法让Ruby缓存DNS请求?我可以更改代码以显式使用IP地址,但这是解决此问题的错误位置。
我正在运行Ubuntu 12.04和Ruby 1.9.3。
我刚刚查看了其余客户端代码,它仅使用 Net::HTTP,而 Net::HTTP 又使用 Socket。
然后一切都消失在 Ruby 解释器实现中,这是我的知识有点薄弱的地方(并且行为可能会根据您是否使用 MRI、JRuby 等而改变)
我希望 DNS 解析最终会遵循操作系统,所以也许您的问题是由于主机上的一些奇怪的解析器配置?