【问题标题】:PermanentTaskFailure in AppEngine deferred libraryApp Engine 延迟库中的永久任务失败
【发布时间】:2010-03-23 17:37:00
【问题描述】:

我正在使用 App Engine 和延迟库。但每隔一段时间我的任务就会失败并出现以下错误:

Permanent failure attempting to execute task
Traceback (most recent call last):
  File "/base/python_lib/versions/1/google/appengine/ext/deferred/deferred.py", 
    line 256, in post
      run(self.request.body)
  File "/base/python_lib/versions/1/google/appengine/ext/deferred/deferred.py", 
    line 122, in run
      raise PermanentTaskFailure(e)
PermanentTaskFailure: Environment variable DJANGO_SETTINGS_MODULE is undefined.

我找到了一个post 说解决方案是:

from google.appengine.ext.webapp import template 

但我没有使用 webapp 框架,我使用的是 Django。我可以尝试什么?

【问题讨论】:

    标签: django google-app-engine scheduled-tasks


    【解决方案1】:

    当您的任务依赖于某些 Python 路径操作或其他在通过延迟向运行时发出第一个请求时未执行的任务时,通常会发生此类错误。您需要确保所有入口点(例如,包含您要延迟的函数的模块)导入一个执行相关路径操作的模块。

    或者,您可以编写自己的延迟任务处理程序,作为框架的一部分,它已经应用了相关的补丁。为此,只需注册处理程序并让它调用 deferred.run(),传入完整的请求正文。

    【讨论】:

    • 那么我是否正确理解我应该将use_library('django', '1.0') 添加到延迟方法所在的模块中,因为延迟调用不会通过main.py 运行?这不会使延迟调用变慢吗?
    • 是的,或者更好的是,将所有设置和路径操作机制放在从任何入口点导入的单个文件中。 use_library 不会使代码变慢,但您还需要确保导入 app-engine-patch (或您正在使用的任何其他库)。任何放缓都是不可避免的 - app-engine-patch 正在对 SDK 进行更改,如果 SDK 不存在,则会导致其中断。
    • 好的,谢谢。实际上,我可以使用 import main 吗?这会做main.py 所做的所有事情,除了运行main(),因为它包含在if __name__ == '__main__': 中。
    • 那行得通,是的。不过,这可能会导致递归导入问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 2011-06-22
    • 2012-02-21
    • 2017-04-29
    • 2011-12-28
    • 1970-01-01
    相关资源
    最近更新 更多