ant*_*koo 2 python django virtualbox
我们在Windows 7主机中的虚拟机Ubuntu LTS 12.04 guest中运行我们的开发环境.我们在开发期间使用./manage.py runserver.
最近我们将Django版本升级到最新版本(1.4.19)但注意到一个非常奇怪的行为:来自主机的请求从5到30秒服务,而来自VM内部的请求在不到一秒的时间内提供,因为它们应该是.这个问题已经在Django 1.4.18(https://docs.djangoproject.com/fr/1.7/releases/1.4.18/)中引入,所有旧版本都可以快速运行.
在来宾或主机中使用不同的浏览器没有任何区别.请求的资源是动态的还是静态的(我们使用静态应用程序在开发期间提供静态内容)也没有任何区别.
什么可能导致这种行为?从发行说明来看,我们并不是很清楚.
哇我无法相信我终于设法解决了这个问题.我有完全相同的问题,你提到它只出现在Django 1.4.17之后的版本中,我把它放在了正确的轨道上.
简短解决方案:将您的网关IP添加到客户机中的/ etc/hosts,例如:
10.0.2.2 10.0.2.2
Run Code Online (Sandbox Code Playgroud)
详细解释: Django 1.4.18引入了包含下划线的标题的剥离.这是无害的,但django.core.servers.basehttp.WSGIRequestHandler.get_environ方法略有改变.从1.4.18开始,它依赖于wsgiref.simple_server.WSGIRequestHandler.get_environ,其中包含以下行:
host = self.address_string()
Run Code Online (Sandbox Code Playgroud)
address_string是一种方法来自BaseHTTPServer:
def address_string(self):
"""Return the client address formatted for logging.
This version looks up the full hostname using gethostbyaddr(),
and tries to find a name that contains at least one dot.
"""
host, port = self.client_address[:2]
return socket.getfqdn(host)
Run Code Online (Sandbox Code Playgroud)
对getfqdn的调用是(缓慢的)罪魁祸首:
In [1]: import socket
In [2]: %time socket.getfqdn("10.0.2.2")
CPU times: user 0 ns, sys: 0 ns, total: 0 ns
Wall time: 1.56 s
Out[2]: '10.0.2.2'
Run Code Online (Sandbox Code Playgroud)
/etc/hosts在我的客户机中添加"10.0.2.2 10.0.2.2"行后,主机名解析接近即时:
In [3]: %time socket.getfqdn("10.0.2.2")
CPU times: user 0 ns, sys: 0 ns, total: 0 ns
Wall time: 834 µs
Out[3]: '10.0.2.2'
Run Code Online (Sandbox Code Playgroud)
请注意,您可以通过route -n在访客环境中运行来找到您的网关地址.
| 归档时间: |
|
| 查看次数: |
796 次 |
| 最近记录: |