Django ImproperlyConfigured - Die SECRET_KEY-Einstellung darf nicht leer sein
Ich arbeite mit einer django-Anwendung mit Sellerie. Ich erhalte eine seltsame Fehlermeldung in meinen tasks.py - Datei, die ist wie folgt:
from __future__ import absolute_import
from celery import shared_task
from django.contrib.auth.models import User
# some code
# ....
Hier ist der Fehler:
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY must not be empty.
In meinem settings.py, SECRET_KEY definiert ist
# ...
import myproj.tasks
import djcelery
djcelery.setup_loader()
# ...
SECRET_KEY = '18730s9n9sjxamsuJSismxOIAmso102xjAs'
# ...
Die Anwendung läuft wunderbar, wenn ich den Kommentar der import in der tasks.py Datei:
# from django.contrib.auth.models import User
und, noch erstaunlicher ist, dass es auch gut läuft, wenn ich die genau die gleiche Importe in einer anderen Datei (z.B. testfile.py) in das gleiche Verzeichnis.
Warum ist dieser Fehler passiert?
Edit: Hier ist mein celery.py Datei
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)
- Hast du
DJANGO_SETTINGS_MODULE
Umgebungsvariable? - Ja, es ist in manage.py mit
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproj.settings")
- Die Django version verwenden Sie?
- Ich bin mit Django 1.8.3
- Zeigen Sie uns ein Befehl, den du gelaufen bist, um diese Fehler. Wie starten Sie Sellerie?
- Es ist höchstwahrscheinlich ein Ergebnis von circular import irgendwo. Es ist schwer zu sagen, wo genau, ohne Ihre gesamte code-Basis.
- Ich bekomme genau das gleiche Ergebnis beim aufrufen einer Sellerie-oder manage.py -Befehl, zum Beispiel
celery -A myproj worker -B -l info
- können Sie nach Ihren celery.py? sind Sie mit django-celery?
- Ich aktualisierte die Frage zu zählen celery.py. Ich bin mit django-celery 3.1.17
- könnte es sein, dass du den Import etwas auf deine Einstellungen-Datei, die bewirkt, dass die Einstellungen-Datei importiert werden im Gegenzug? (Rundschreiben-import)
- Wie bereits in den docs docs.celeryproject.org/en/latest/userguide/... können Sie den Pfad zu einer Aufgabe anstatt den Import der Aufgaben direkt in Ihren Einstellungen.
- Yep, das war es. Ich habe den Fehler behoben, danke für die Hilfe, @Paulo. Sollten Sie veröffentlichen Sie Ihre Antwort, damit kann ich markieren Sie es als richtig =)
- Lassen Sie uns weiter, diese Diskussion im chat.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Problem wurde verursacht durch den Import der Sellerie Aufgaben in der settings-Datei, um Sie zu übergeben, um die
CELERYBEAT_SCHEDULE
Einstellung.Dieser import verursacht eine kreisförmige import, weil wenn die Aufgabe importiert wird, lädt die Einstellungen, die nur geladen werden, bis zu dem Punkt, wo die Aufgabe importiert wurde, so beschwert sich, dass keine
SECRET_KEY
konfiguriert wurde.Um dieses Problem zu lösen (und als Allgemeine bewährte Methode), bei der Konfiguration
CELERYBEAT_SCHEDULE
benutzen Sie den Pfad zu der Aufgabe etwa so:Quelle http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#entries
Dies kann passieren, wenn Sellerie nicht wissen, wo Sie Ihre Django-Einstellungen. Versuchen Sie, den Sellerie, die Einstellungen in eine separate Datei:
dann markieren von Aufgaben als:
myproj.settings
undhub.settings
im code. Ist das ein Fehler, oder einfach nur ein nicht-vollständig-anonymisiert-code?