我创建了一个项目 github 存储库,其中包含 Docker、Django、React、Redis、Celery: https://github.com/axilaris/dockerize-django-react-celery-redis。我的目标是让 celery 正常工作,并显示徽标和后台任务日志打印。
这基于 Docker - React 和 Django 示例教程代码: https://github.com/dotja/authentication_app_react_django_rest
并尝试使用本教程代码中的 Docker - Celery 和 Redis: https://github.com/veryacademy/docker-mastery-with-django/tree/main/Part-4%20Django%20Postgres%20Redis%20and%20Celery <-- Part 4 tutorial for Celery & Redis
这是 redis 和 celery 部分的 docker-compose.yaml:
# Redis
redis:
image: redis:alpine
container_name: redis
ports:
- "6379:6379"
# celery
celery:
restart: always
build:
context: ./backend
command: celery -A backend worker -l DEBUG
volumes:
- .:/django
container_name: celery
depends_on:
- redis
- backend
这是我在 user_api/tasks.py 中实现后台任务的方法(https://github.com/axilaris/dockerize-django-react-celery-redis/blob/main/backend/user_api/tasks.py)
in backend/user_api/tasks.py
from __future__ import absolute_import, unicode_literals
from celery import shared_task
import logging
@shared_task
def add(x, y):
logging.debug("XXX add")
return x + y
我的项目应该通过运行非常简单地工作:
docker-compose build
docker-compose up
但是,没有 celery 徽标(1),并且我没有看到后台进程打印日志(2)。我认为它是在 result.ready 返回时执行的。但为了完整性我想要这两个。 (尽管 result.ready 可能正在与 celery 一起执行后台任务)
它没有打印这个芹菜标志。 (您可以检查 docker-compose up 的完整日志打印 - https://gist.github.com/axilaris/a2776fc8f39e53bbc93e0d7a4e0ba0f5):
celery | -------------- celery@b755a7cdba8d v5.3.6 (emerald-rush)
celery | --- ***** -----
celery | -- ******* ---- Linux-6.6.12-linuxkit-aarch64-with 2024-03-02 20:48:06
celery | - *** --- * ---
celery | - ** ---------- [config]
celery | - ** ---------- .> app: core:0xffff9bbd7550
celery | - ** ---------- .> transport: redis://redis:6379//
celery | - ** ---------- .> results: redis://redis:6379/
celery | - *** --- * --- .> concurrency: 10 (prefork)
celery | -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
celery | --- ***** -----
celery | -------------- [queues]
celery | .> celery exchange=celery(direct) key=celery
这是我执行后台任务的方式,但是后台任务的 django 日志中没有日志打印。 (您可以找到完整的日志打印https://gist.github.com/axilaris/a2776fc8f39e53bbc93e0d7a4e0ba0f5)
>>> % docker exec -it backend_container sh
>>> /app # python manage.py shell
>>> Python 3.9.18 (main, Jan 27 2024, 07:18:02)
>>> [GCC 13.2.1 20231014] on linux
>>> Type "help", "copyright", "credits" or "license" for more information.
>>> (InteractiveConsole)
>>> from user_api.tasks import add
>>> result = add.delay(2, 2)
>>> result.ready
<bound method AsyncResult.ready of <AsyncResult: 9046dd90-f44d-4eba-9881-acc0fbc4278a>>
我的目标是看到上面打印的 celery 徽标,并在 django 日志中验证后台进程是否执行,就像 (https://youtu.be/oBQxFn1CDno?si=58ZRfLZeuCC8fz01&t=1204 at 20:04) .
不确定您是否正在寻找终端中如下所示的 Redis ASCII 徽标之类的徽标。
_._
_.-``__ ''-._
_.-`` `. `_. ''-._
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, )
|`-._`-...-` __...-.``-._|'` _.-'|
| `-._ `._ / _.-' |
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
无论如何,这就是我经历过的事情。
您的 GitHub Gist 中的完整日志显示 Celery 运行正常,但它不显示 Celery 徽标,因为它是后台进程。
Celery 本身没有显示徽标的图形用户界面 (GUI)。它在后台运行,异步处理任务。
日志显示后台任务的成功执行很可能是因为 result.ready 返回。
我看到您在
docker-compose.yaml
文件中启用了调试模式,建议检查 celery 日志 docker-compose logs celery --tail=1000 -f
以检查任何丢失的日志。
如果我缺少某些内容,请告诉我您希望看到的内容,例如 svg 徽标或 ASCII 日志。