Celery で Django を使用して、連絡先/電子メールの解析に関連するバックグラウンドで 2 つのタスクを実行しています。
構造は次のとおりです。
project
/api
/core
tasks.py
settings.py
settings.py ファイルには以下が含まれます。
BROKER_URL = 'django://'
BROKER_BACKEND = "djkombu.transport.DatabaseTransport"
#celery
BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_USER = "guest"
BROKER_PASSWORD = "guest"
BROKER_VHOST = "/"
sys.path.append(os.path.dirname(os.path.basename(__file__)))
CELERY_IMPORTS = ['project.core.tasks']
import djcelery
djcelery.setup_loader()
# ....
INSTALLED_APPS = (
#...
'kombu.transport.django',
'djcelery',
)
tasks.py には以下が含まれます。
from celery.task import Task
from celery.registry import tasks
class ParseEmails(Task):
#...
class ImportGMailContactsFromGoogleAccount(Task):
#...
tasks.register(ParseEmails)
tasks.register(ImportGMailContactsFromGoogleAccount)
また、wsgi.py に追加
os.environ["CELERY_LOADER"] = "django"
現在、このアプリを WebFactional サーバーでホストしています。私のローカルホストではこれは問題なく動作しますが、Django アプリが Apache サーバーにデプロイされている WebFaction サーバーでは、次のようになります。
2013-01-23 17:25:00,067: ERROR/MainProcess] Task project.core.tasks.ImportGMailContactsFromGoogleAccount[df84e03f-9d22-44ed-a305-24c20407f87c] raised exception: Task of kind 'project.core.tasks.ImportGMailContactsFromGoogleAccount' is not registered, please make sure it's imported.
しかし、タスクは登録済みとして表示されます。私が走れば
python2.7 manage.py celeryd -l info
私は得る:
-------------- celery@web303.webfaction.com v3.0.13 (Chiastic Slide)
---- **** -----
--- * *** * -- [Configuration]
-- * - **** --- . broker: django://localhost//
- ** ---------- . app: default:0x1e55350 (djcelery.loaders.DjangoLoader)
- ** ---------- . concurrency: 8 (processes)
- ** ---------- . events: OFF (enable -E to monitor this worker)
- ** ----------
- *** --- * --- [Queues]
-- ******* ---- . celery: exchange:celery(direct) binding:celery
--- ***** -----
[Tasks]
. project.core.tasks.ImportGMailContactsFromGoogleAccount
. project.core.tasks.ParseEmails
相対的なインポート エラーである可能性があると思いましたが、settings.py と wsgi.py の変更によりそれが防止されると想定しました。
WebFactional でサポートされている複数の Python バージョンがこれに関係しているのではないかと考えていますが、Python 2.7 用のすべてのライブラリをインストールし、2.7 用の Django も実行しているので、問題はないはずです。
celeryd -l info を使用して localhost で実行すると、ワーカーを起動するとタスクもリストに表示されますが、タスクを呼び出してもエラーは出力されません。完全に実行されます。
ありがとうございました