2016-12-21 12 views
0

最近、Django 1.9.10でCelery 4.0.2を使用していくつかの定期的な作業を開始しました。私は手動にタスクを追加するとDjangoプロジェクト内でCeleryワーカーを起動できない

  • セロリアプリは、すべてのアプリケーションディレクトリ
  • に含まれているタスクを発見されていません。基本的に、私は公式ドキュメントに記載された手順に従っていても二つの問題に実行しますセロリのAppと、私はこのエラーを取得し、労働者を実行しよう:

    のRuntimeError:Modelクラスcore.models.Modlは、明示的なapp_labelを宣言しないとINSTALLED_APPS

内のアプリケーションではありませんありません。 、私はコアappディレクトリに作成された私のtasks.pyについては

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 

、私は単にいくつかのモデルをインポートし、いくつかのデータを挿入するためにそれらを使用して、このような何か:

これは私がセロリアプリケーションを作成する方法です。

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

私が使用するワーカーを起動するには:セロリ - セロリ_パワーワーカー--loglevel = info、プロジェクトの構造とルートレベルではセロリのアプリケーション設定を含むディレクトリcelery_powerと、すべてのアプリケーションを含む "apps"ディレクトリがあります。その中にはtasks.pyファイルを含む "core"のファイルがあります – addonis1990

+0

セロリのアプリがあるディレクトリです「セロリパワー」と呼ばれる?そうでない場合は、コマンドを 'セロリー-A some_directoryワーカー--loglevel = info'に置き換えてください。 –

答えて

0

それは問題は、私は私のDjangoのプロジェクトを構造化された方法に関係していることが判明しました。基本的に、ジャンゴの起動時にセロリのアプリが読み込まれていませんでした。 celery_powerディレクトリ(プロジェクトのルートレベルにある単一のファイルcelery_app.pyを単純に使用したもの)を削除し、以下の構造に従うことで、セロリのアプリケーションはすべてのタスクを自動検出することができ、問題:

Project Structure