Le céleri: la détection automatique ne trouve pas de module tâches dans l'app
J'ai la configuration suivante avec une nouvelle installé le céleri et django 1.4:
settings.py:
import djcelery
djcelery.setup_loader()
BROKER_HOST = 'localhost'
BROKER_PORT = 5672
BROKER_USER = 'user'
BROKER_PASSWORD = 'password'
BROKER_VHOST = 'test'
[...]
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.admin',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.staticfiles',
'djcelery',
'south',
'compressor',
'testapp',
]
testapp/tasks.py:
from celery.task import task
@task()
def add(x, y):
return x + y
La livraison d'un Message à l'celeryd fonctionne très bien, mais la tâche est toujours non (si la détection automatique ne semble pas fonctionner correctement ici). Seulement si j'ai importer le module tâches dans tasks/__init__.py
la tâche est trouvé et je peux l'utiliser.
Également la documentation est un peu déroutant au sujet de la décoratrice d'importation, mais je pense que c'est la bonne maintenant.
Où est le bug dans mon installation?
OriginalL'auteur Martin | 2012-04-19
Vous devez vous connecter pour publier un commentaire.
C'était un bug dans django-céleri 2.5.4, veuillez la mettre à jour 2.5.5!
Oui, cela a fonctionné 🙂
OriginalL'auteur asksol
Ajouter
CELERY_IMPORTS
à votre settings.py:Importer toutes les tâches
testapp.tasks.__init__
fichierPuis Céleri va importer toutes les tâches de testapp.les tâches de dossier et nommez-les comme ils sont
__init__.py
de l'application a été la tâche de travail.Eu le même problème avec 2.5.5. L'ajout de CELERY_IMPORTS a fonctionné pour moi, mais seulement avec un nom explicite argument dans le décorateur. Simplement à l'aide de @tâche() génère une KeyError.
Cela fonctionne pour moi, merci beaucoup.
OriginalL'auteur dgel
J'ai eu le même problème avec django 1.4.1 céleri 3.0.9 et il fixe le nom de la tâche.
@tâche() -> @tâche(nom='testapp.les tâches.ajouter')
J'avais besoin de redémarrer le céleri client. Mais je n'ai pas à faire d'autres changements.
Il ne semble pas fonctionner avec au-dessus de la suggestion.
OriginalL'auteur jantzen05
Pour tout celui qui trébuche ici à la recherche d'similaires la solution du problème.
Dans mon cas, c'était de commutation de l'ancien module de bases de
INSTALLED_APPS
paramètre pour une nouvelle AppConfig en fonction de la configuration.Pour corriger cela, vous devez changer la façon dont vous nourrissez les paquets de céleri, comme indiqué ici dans le 2248 Céleri problème:
Au lieu de l'ancien Céleri 3 voies:
app.autodiscover_tasks()
oui,par exemple, si je mets le blog de.des apps.BlogConfig " dans mon INSTALLED_APPS,le céleri peut pas trouver que.Je dois mettre "blog" dans INSTALLED_APPS que le céleri peut trouver
OriginalL'auteur Janusz Skonieczny
Je suis sûr que vous devez importer le "Céleri instance de l'application" et de déclarer une tâche comme ceci:
noter qu'il y a un celery.py fichier dans le project_dir/project_name dossier, qui déclare le céleri exemple, comme ceci:
comme indiqué dans le la documentation officielle.
aussi, vous devez vous inscrire à la tâche, dans l'une de ces trois façons:
bind=True
le décorateur, comme:@app.task(bind=True)
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
chaque application Django du dossier peut contenir un tasks.py fichier, et les tâches déclarée à l'intérieur, il sera automatiquement enregistré
notez que les modifications apportées aux tâches qui NÉCESSITENT UN CÉLERI REDÉMARRAGE en effet
Je pense que vous devez importer manuellement vos tâches de settings.py. Je suis sur windows et mon céleri version est 3.1.25 . - Je résoudre le problème avec l'importation manuelle
OriginalL'auteur Iman Akbari