2017-10-31 16 views
2

Ich habe eine Django 1.11 Projekt, mit Sellerie 3.1.25, angelegt wie:kann nicht lokalen Sellerie Arbeiter laufen, kein Modul mit dem Namen myapp

env 
myproject 
    myapp 
    myotherapp 
    settings 
     settings.py 
    __init__.py 
    celery_init.py 

Mein __init__.py enthält:

from .celery_init import app as celery_app 

und mein celery_init.py enthält:

from __future__ import absolute_import 

import os 
import sys 
import traceback 

from celery import Celery 

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.settings') 

from django.conf import settings 

app = Celery('myproject') 

# Using a string here means the worker will not have to 
# pickle the object when using Windows. 
app.config_from_object('django.conf:settings') 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 

@app.task(bind=True) 
def debug_task(self): 
    print('Request: {0!r}'.format(self.request)) 

Wenn ich einen lokalen Sellerie Arbeiter für d beginnen evelopment Prüfung, mit:

env/bin/celery worker -A myproject -l info -n [email protected]%h -Q somequeue 

es nicht, mit der Ausnahme:

ImportError: No module named myapp 

Was dies verursacht? Ich nehme an, dass es ein Pfadproblem ist und ich die Projekteinstellungen nicht richtig laden kann, aber ich sehe das Problem mit meiner Konfiguration nicht. Ich habe gerade ein Upgrade auf Django 1.11 durchgeführt, und diese Einstellungen funktionierten in der vorherigen Version einwandfrei. Was mache ich falsch?

Ich habe versucht, Druckanweisungen am Ende meiner celery_init.py hinzuzufügen, um sicherzustellen, dass es alles lädt, und jede Zeile wird ohne Fehler abgeschlossen.

+0

Können Sie die vollständige Stack-Trace für den Fehler buchen? – solarissmoke

+0

Führen Sie den Befehl aus dem Ordner myproject aus (Ebene des Projektebenenordners, nicht auf Einstellungen), stellen Sie sicher, dass virtuelles env aktiviert ist, wenn die Anwendung innerhalb eines ausgeführt wird. – daemon24

Antwort

0

Das Problem stellte sich in Verbindung mit einem fehlenden Initialisieren von Django als sys.path-Problem heraus. Die Funktion celery_init.py sieht folgendermaßen aus:

from __future__ import absolute_import 
import os 
import sys 

from celery import Celery 
import django 

app = Celery('myproject') 

app.config_from_object('django.conf:settings', namespace='CELERY') 

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.settings') 
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../myproject'))) 
django.setup() 
from django.conf import settings 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 
Verwandte Themen