django 1.7rc3和芹菜3.13 - AppRegistryNotReady

时间:2014-08-25 20:29:47

标签: python django celery

这对我不起作用

  

$> cat / etc / lsb-release
  DISTRIB_ID = Ubuntu的
  DISTRIB_RELEASE = 12.04
  DISTRIB_CODENAME =精确
  DISTRIB_DESCRIPTION =" Ubuntu 12.04.2 LTS"

     

django 1.7rc3
  芹菜3.1.13
  python 2.7

我尝试运行

celery worker -A <project_name>

我得到了

django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

runserver命令工作正常,所以我不认为它与我的设置有关吗?

python manage.py runserver 0.0.0.0:8080

我已经仔细检查过celery.py并确认它具有以下行的正确值:

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')

我还应该做些什么吗?

3 个答案:

答案 0 :(得分:5)

Django 1.7现在要求standalone scripts进行不同的初始化。在manage.py上下文之外运行时,您现在需要包括:

import django
django.setup()

尝试在脚本中的app = Celery('proj')之前添加它。

答案 1 :(得分:1)

我发现这个失败的原因是因为我在其中一个tasks.py

中有这个
CURRENT_DOMAIN = Site.objects.get_current().domain

我现在用

来支持这一点
CURRENT_DOMAIN = lambda: Site.objects.get_current().domain

目前正在等待github上是否有人愿意提供更好的推荐。 https://github.com/celery/celery/issues/2227

如果我拿到一个,

会更新。如果没有,可能只会执行一个帮助函数,懒惰返回我想要的值。

<强>更新
根据芹菜作者的建议,我重构了我的代码,所以我没有在模块级别进行调用。
他还通过确保在导入任务模块之前调用django.setup()来解决这个问题 https://github.com/celery/celery/issues/2227

答案 2 :(得分:0)

我只看到同样的问题:

CELERYBEAT_SCHEDULER='djcelery.schedulers.DatabaseScheduler'

你启用了吗?如果我使用默认的芹菜调度程序运行它,它加载正常。但无法使用Django调度程序加载它。