2016-08-10 3 views
0

셀로리를 장고 프로젝트에 통합하려고합니다. 나는 Celery 문서를 따라 갔고 간단한 Hello World 작업을 실행할 수있다. 그러나 내 모델을 내 작업 정의로 가져 오려고하면 AppRegisteredNotReady 예외가 발생합니다. 나는이 예외에 관한 몇 가지 더 오래된 논의를 찾고있다. 아마 뭔가 간단한 걸 놓친 것 같습니다.Django and Celery, AppRegisteredNotReady 예외

파이썬 3.5, 장고 1.9, 셀러리 3.1.23

Celery.py :

from __future__ import absolute_import 
import os 
from celery import Celery 
from django.conf import settings 

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.local') # pragma: no cover 

app = Celery('autopool') 
app.config_from_object('django.conf:settings') 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, force=True) 

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

AUTOPOOL/초기화 평 :

from __future__ import absolute_import 

from autopool.celery import app as celery_app # noqa 

애플 리케이션/풀/작업. py :

from __future__ import absolute_import 
from celery import shared_task 

@shared_task 
def send_period_mail(period_id): 
    print("Mail sent for period " + period_id) 

나는 명령 셀러리을 시작 : 내보기에서

celery -A autopool worker -l info 

, 내가 실행 :

import .tasks send_period_mail 
send_period_mail(period_id=period.id) 

이 모든 작동합니다.

그러나 나는 작업에 모델을 추가 할 때 : 나는 셀러리를 시작하려고하면

from __future__ import absolute_import 
from celery import shared_task 
from .models import Period 

@shared_task 
def send_period_mail(period_id): 
    print("Mail sent for period " + period_id) 

지금, 나는 AppRegisteryNotReady가 나타납니다 앱은 아직 예외가로드되지 않습니다.

전체 스택 추적 : http://pastebin.com/kmJZLHpT

누구나 실마리가?

답변

0

celery.py 파일을 가져올 때 장고는 아직 애플 리케이션/모델을로드하지 않은 (그래서 모델 from .models import Period 가져올 실패)

@shared_task 
def send_period_mail(period_id): 
    from .models import Period 
    print("Mail sent for period " + period_id) 

그래서 그것은 단지로드 될 함수 내에서 가져 오기를 이동하기 때문에 함수가 호출되면 (장고가 준비 됨)

0

Marco의 답변이 작동합니다. 고마워, 마르코.

또한 autodiscover_tasks() 설정에서 force=True을 제거하여 문제를 해결할 수 있음을 발견했습니다.

변경 app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, force=True) to app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

관련 문제