2016-12-21 3 views
0

Недавно я начал использовать Celery 4.0.2 с Django 1.9.10 для выполнения некоторых периодических задач. В принципе, я бегу на две проблемы, хотя я следовал шаги, указанные в официальной документации:Не удается запустить работника сельдерей в проекте Django

  • сельдерея приложение не обнаруживая задачи, которые входят в каждый каталог приложений
  • Когда я вручную добавить задачи сельдерей App и попытаться запустить рабочий, я получаю эту ошибку:

    RuntimeError: класс модели core.models.Modl не декларировать явный app_label и не является в применении в INSTALLED_APPS

Это, как я создать сельдерей App:

from __future__ import absolute_import, unicode_literals 
import os 
from celery import Celery 
from django.conf import settings 
from .scraper import scraper_example 

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'conf') 
app = Celery('celery_power', 
     broker=settings.CELERY_BROCKER_URL, 
     backend=settings.CELERY_RESULT_BACKEND, 
     include=['apps.core.tasks']) 
# app.autodiscover_tasks() in case I don't include the tasks module, 
# never worked by the way 

Для моего tasks.py, который я создал в директории ядра приложения, я просто импортировать несколько моделей и использовал их, чтобы вставить данные, что-то вроде этого:

from .models import Modl 
from celery import shared_task 

@shared_task 
def deal_with_modl(): 
    m = Modl(name="model") 
    m.save() 
+0

Какую команду вы используете для запуска рабочего, и что ваша структура каталогов? Кроме того, вы импортируете сельдерей в '__init __. Py'? http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html –

+0

для запуска работника, которого я использую: celery -Acelery_power worker --loglevel = info, что касается структуры проекта и на корневом уровне у меня есть каталог celery_power, который содержит конфигурацию приложения для сельдерея и каталог «apps», который содержит все приложения, среди которых «ядро», которое включает файл tasks.py – addonis1990

+0

Является ли каталог, в котором установлено приложение для сельдерея называется «celery_power»? Если нет, вы должны поменять их, поэтому команда 'celery -A some_directory worker --loglevel = info' –

ответ

0

Оказалось, что проблема связана с тем, как я структурировал проект django. По сути, приложение для сельдерея не загружалось, когда начиналось джанго. Удалив каталог celery_power (я просто использовал один файл celery_app.py, который находится на корневом уровне проекта) и следуя нижеприведенной структуре, приложение celery могло автоматически обнаруживать все мои задачи, и я смог запустить своих работников без вопросы:

Project Structure

Смежные вопросы