这对我不起作用
$> 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')
我还应该做些什么吗?
答案 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调度程序加载它。