我正在使用芹菜运行django应用程序.我在tasks.py文件中遇到一个奇怪的错误,如下所示:
from __future__ import absolute_import from celery import shared_task from django.contrib.auth.models import User # some code # ....
这是错误:
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY must not be empty.
在我的settings.py中,定义了 SECRET_KEY
# ... import myproj.tasks import djcelery djcelery.setup_loader() # ... SECRET_KEY = '18730s9n9sjxamsuJSismxOIAmso102xjAs' # ...
如果我在tasks.py文件中注释导入,应用程序运行正常:
# from django.contrib.auth.models import User
并且,更令人惊讶的是,如果我在同一目录中的另一个文件(例如testfile.py)中进行完全相同的导入,它也可以正常运行.
为什么会发生这种错误?
编辑:这是我的celery.py文件
from __future__ import absolute_import import os from celery import Celery os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproj.settings') from django.conf import settings #noqa app = Celery('myproj') app.config_from_object('django.conf:settings') app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
Paulo.. 5
该问题是由将celery任务导入设置文件以将其传递给CELERYBEAT_SCHEDULE
设置引起的.
此导入导致循环导入,因为在导入任务时,它将加载仅在导入任务之前加载的设置,因此抱怨没有SECRET_KEY
配置.
要解决此问题(并作为一般最佳实践),在配置时CELERYBEAT_SCHEDULE
使用任务路径,如下所示:
CELERYBEAT_SCHEDULE = { 'add-every-30-seconds': { 'task': 'myapp.tasks.my_task', 'schedule': timedelta(seconds=30), 'args': (16, 16) }, }
来源http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#entries
该问题是由将celery任务导入设置文件以将其传递给CELERYBEAT_SCHEDULE
设置引起的.
此导入导致循环导入,因为在导入任务时,它将加载仅在导入任务之前加载的设置,因此抱怨没有SECRET_KEY
配置.
要解决此问题(并作为一般最佳实践),在配置时CELERYBEAT_SCHEDULE
使用任务路径,如下所示:
CELERYBEAT_SCHEDULE = { 'add-every-30-seconds': { 'task': 'myapp.tasks.my_task', 'schedule': timedelta(seconds=30), 'args': (16, 16) }, }
来源http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#entries