Ошибка urlfetch в App Engine python27: «[Errno 11003] сбой getaddrinfo» - PullRequest
1 голос
/ 10 ноября 2011

Я пытаюсь переключить приложение для своего движка приложений с python 2.5 на 2.7, и urlfetch.fetch () просто не хочет работать (по крайней мере, на сервере dev; я еще не развернул его).Если я сделаю что-то простое, например:

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), она тоже будет работать.

Есть идеи?Кто-нибудь еще сталкивался с этим?

1 Ответ

1 голос
/ 29 ноября 2011

Хорошо, я смог воспроизвести эту проблему, и после долгих поисков в 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 на самом деле имел значение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...