6

我有一个在 Google App Engine 上运行的 django 1.5,使用该djangoappengine模块进行拼接。一切正常,除了对 /_ah/queue/deferred 的大约一半调用引发以下导入错误:

Traceback (most recent call last):
  File "..../third_party/djangoappengine/deferred/handler.py", line 2, in <module>
    from djangoappengine import main
ImportError: No module named djangoappengine

如您所见,djangoappengine 模块位于目录内third_party,并且该目录已添加到sys.path文件appengine_config.py中,因此执行以下操作应该没有任何问题from djangoappengine import main

sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'third_party'))

中的相关行app.yaml是:

handlers:
- url: /_ah/queue/deferred
  script: third_party/djangoappengine/deferred/handler.py
  login: admin

是什么导致了这些零星的导入错误?难道我做错了什么?也许有一个我不知道的导入循环?

4

2 回答 2

2

发现我的代码使用旧的 CGI 接口而不是新的 WSGI。我解决了这个问题,此后问题没有再出现。

更新app.yaml

handlers:
- url: /_ah/queue/deferred
  script: djangoappengine.deferred.handler.application
  login: admin
于 2014-09-15T10:48:58.047 回答
1

众所周知,defer 库对 3rd 方导入做了一些时髦的事情。这与延迟任务是否加载新实例有关,第 3 方库加载缓慢。您有 2 个选项(第 3 个选项我不确定是否可行)

  • 使用标准任务队列调用。如果需要,我可以帮助您重新编写。
  • 如果您只需要django而不是特殊的 djangoappengine 库,则应该使用应用引擎之一。他们保证被加载。
  • 不知道这是否可行,但可能值得一试,将导入放在 try except 循环中,直到它被加载。这只是一个想法,我自己从未尝试过这样做
于 2014-09-09T13:51:30.727 回答