2

1) モデルのデータベースとして MongoDB (mongoengine) を使用して、Celery (RabbitMQ をブローカーとして使用) と Django を使用してアプリケーションを構築しようとしています。そのため、Web サーバーによって受信されたリクエストはタスクに変換され、Celery の助けを借りてキューに入れられ、ワーカーによって実行されます。

次のチュートリアルに従いました。

http://docs.celeryproject.org/en/master/django/first-steps-with-django.html#configuring-your-django-project-to-use-celery

https://mongoengine-odm.readthedocs.org/en/latest/django.html

しかし、私はまだ次のエラーが発生します:

ImproperlyConfigured: settings.DATABASES が正しく構成されていません。ENGINE 値を指定してください。

両方のチュートリアルで述べたように、settings.DATABASES はコメント化する必要があり、その代わりに

mongoengine.connect('myDB')

それでもエラーは、データベースが構成されていないことに関するものです。

(それとは別に、Celery の結果バックエンドを構成していません。)

何をどこに設定する必要があるかについて、誰かがアドバイスを手伝ってくれますか?

2) もう 1 つの質問は、Celery のみを含むプロジェクトでは、常に Celery インスタンスが存在することです。しかし、Django と Celery を使用した Web アプリケーションの構築に関するチュートリアルでは、これについて言及していません。Celery を明示的にインスタンス化する必要がありますか、それともデフォルトで別の場所で行われますか?

4

2 に答える 2

1

Celeryは Django のデフォルト データベース (で定義されているものsettings.DATABASES) を Celery Result データベースとして使用しようとしますが、mongoengine をプライマリ Django データベースとして使用するには、 settings.DATABASES をバイパスする必要があります

したがって、Celery が settings.DATABASES を調べようとしないように、との両方BROKER_URLを適切に定義してください。CELERY_RESULT_BACKENDそれらを同じにしたいのですが、別々にすることもできます。

BROKER_URL = "amqp://guest:guest@localhost:5672//"
CELERY_RESULT_BACKEND = "amqp"

その他のバックエンドについては、こちらを参照してください。


質問のパート 2。

持っCELERY_ALWAYS_EAGER = Trueていますsettings.pyか?そのため、通常、Celery プロセスを個別に起動する必要はありません。ただし、これを本番環境で使用しないでください。この質問を参照してください。

于 2013-07-16T19:35:39.373 に答える
1

1)誰かが答えに興味を持っている場合、私は最終的にそれを機能させることができましたが、何が起こったのかを正しく理解したかどうかはわかりません.

どうやら問題は、Celery の結果バックエンドを設定していないことでした。次の行をsettings.pyに入れるとすぐに、エラーを取り除きました。

CELERY_RESULT_BACKEND = "amqp"

2) 私のプロジェクト (私は djcelery を使用しています) は、Celery を明示的にインスタンス化しなくても機能しています。これはフレームワークのどこかで行われていると思います。

于 2013-01-16T10:21:30.990 に答える