簡體   English   中英

Django ImproperlyConfigured-SECRET_KEY設置不得為空

[英]Django ImproperlyConfigured - The SECRET_KEY setting must not be empty

我正在使用celery運行django應用程序。 我在task.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'
# ...

如果我task.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)

此問題是由於將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不知道在哪里查找Django設置,則可能會發生這種情況。 嘗試在一個單獨的文件中指定芹菜設置:

# celery.py
from __future__ import absolute_import

import os
from celery import Celery

from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'yourapp.settings')
app = Celery('yourapp')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

然后將任務標記為:

# tasks.py
from yourapp.celery import app

@app.task()
def yourtask():
    pass

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM