我正在尝试将我的应用引擎应用从python 2.5切换到2.7而urlfetch.fetch()只是不想工作(至少在开发服务器上;我还没有部署它)。如果我做一些简单的事情:
file = urlfetch.fetch(url="http://www.google.com")
我收到以下错误:
File "C:\workspace\DjangoServer\src\mycode.py", line 167, in request
file = urlfetch.fetch(url="http://www.google.com")
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\urlfetch.py", line 264, in fetch
return rpc.get_result()
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apiproxy_stub_map.py", line 592, in get_result
return self.__get_result_hook(self)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\urlfetch.py", line 366, in _get_fetch_result
raise DownloadError(str(err))
DownloadError: ApplicationError: 2 [Errno 11003] getaddrinfo failed
搜索互联网表明它可能是防火墙或代理问题,但我关闭了防火墙并且我不在代理服务器后面。
这在python 2.5 dev服务器上工作正常,但不是python 2.7 dev服务器。如果我打开一个python 2.7控制台并手动运行socket.getaddrinfo("www.google.com", 80)
,它也可以在那里工作。
有什么想法吗?还有其他人遇到过这个吗?
答案 0 :(得分:1)
好的,我已经能够重现这个问题了,经过很多在git中来回使用的版本来自一个无法正常工作的版本我发现(至少在我的情况下)问题是在django-nonrel中(因为我立刻更新了所有内容:django-nonrel和appengine)。
因此,请执行以下操作:编辑djangoappengine / settings_base.py并更改
try:
from google.appengine.api import apiproxy_stub_map
except ImportError:
from .boot import setup_env
setup_env()
from djangoappengine.utils import on_production_server, have_appserver
为:
from djangoappengine.utils import on_production_server, have_appserver
if not on_production_server:
from .boot import setup_env
setup_env()
真正的问题似乎是在先前版本的django-nonrel中,导入实际上写为:来自google.appengine.api import api_proxy_stub_map (从未找到过和setup_env( )总是被调用),因此,当导入被修复时,不再调用setup_env()(在我的情况下会出现错误)。
第二个注意事项是,由于某种原因,这只发生在Eclipse / PyDev内部运行时它在命令行上运行(尽管环境变量对我来说似乎相同,所以,我不确定为什么要从内部java实际上有所不同)。