問題タブ [cookiecutter-django]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
django - cookiecutter-django プロジェクトで Celery を使用する
現在、小さな django プロジェクトを構築していますが、必要なものがすべて含まれているため、ベースに cookiecutter-django を使用することにしました。プロジェクトをセットアップするときに、cookiecutter-django に Celery の設定を含めるように依頼したところ、プロジェクト内のすべてを見つけることができました。ただし、Celery を正常に実行するにはいくつか問題があります。アプリからタスクを開始しても何も起こりません。
Docker コンテナはすべて適切に起動されています。Django と Postgres が動作し、Redis が起動し、コンテナーにバッシュしてクエリを実行できました。コンソール出力から、celeryworker コンテナーが稼働中であることがわかります。また、自分のタスクが Celery によって認識されていることもわかります。
これについて多くのことを困惑させた後、Flower 用の新しい Docker コンテナーを作成して、フードの下で何が起こっているかを確認することにしました。興味深いことに、ワーカーがあり、その名前が正しいことがわかります (Celery コンテナーのワーカー ID を比較しました)。ただし、次のようなビューの 1 つからタスクを開始すると:
Flower にタスクが入ってくる様子がありません。celery_task_id
UUIDを取得することがわかりますが、それですべてです。Flower には何も表示されません (アクティブ、処理済み、失敗、成功、再試行のすべてのカウントは 0 のままです)。Redis コンテナーで bash を実行して使用すると、redis-cli
というキューが表示されませんcelery
。これは、単に Celery タスクがないことを意味します。ログにFlowerが残した手がかりがあるかもしれません:
しかし、正直なところ、これがどのように役立つかわかりません。
そこで、何が起こっているのかを確認するためにログを追加したところ、実際に私の Django コンテナは、start_job_task.delay(job.id)
Celery に引き渡すのではなく、実行時に作業を行おうとしていることがわかりました。私はどういうわけか、これらすべてが Redis と何らかの悪いつながりを持っていると感じています。しかし、どのように?docker-compose ファイルの構成は、cookiecutter が設定した方法と同じように見えます。
また、手動で Redis コンテナーのポートを公開しようとしましたが、それ以上はうまくいきませんでした。
完全を期すために、構成ファイルからの私の Celery 設定を以下に示します。cookiecutter で設定したとおり:
タスクが Celery に送信されない理由はありますか?