这对我的不起作用
$>cat/etc/lsb发布
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')
我还有别的事情要做吗?
manage.py
上下文之外运行时,您现在需要包括:
import django
django.setup()
尝试在脚本中的app = Celery('proj')
之前添加它。
我发现失败的原因是因为我的一个任务中有这个。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
我看到了同样的问题,但只有
CELERYBEAT_SCHEDULER='djcelery.schedulers.DatabaseScheduler'
你启用了这个吗?如果我用默认的芹菜调度程序运行它,它的负载就很好。但是无法使用Django调度程序加载它。