Docker Celery 配置 - 适用于 Django/React/Redis/Celery 项目。没有出现 Celery 徽标和后台任务日志

问题描述 投票:0回答:1

我创建了一个项目 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) .

django docker docker-compose redis celery
1个回答
0
投票

不确定您是否正在寻找终端中如下所示的 Redis ASCII 徽标之类的徽标。

                _._                
           _.-``__ ''-._           
      _.-``    `.  `_.  ''-._      
  .-`` .-```.  ```\/    _.,_ ''-._ 
 (    '      ,       .-`  | `,    )
 |`-._`-...-` __...-.``-._|'` _.-'|
 |    `-._   `._    /     _.-'    |
  `-._    `-._  `-./  _.-'    _.-' 
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-' 
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-' 
      `-._    `-.__.-'    _.-'     
          `-._        _.-'         
              `-.__.-'             

无论如何,这就是我经历过的事情。

您的 GitHub Gist 中的完整日志显示 Celery 运行正常,但它不显示 Celery 徽标,因为它是后台进程。

芹菜功能:

  • celery容器创建成功
  • celery 启动 Gunicorn Worker ([2024-03-13 12:27:32 +0000] [10] [INFO] 启动 Gunicorn 20.1.0)。
  • 日志中没有与 Celery 相关的错误。

缺少芹菜标志:

Celery 本身没有显示徽标的图形用户界面 (GUI)。它在后台运行,异步处理任务。

后台任务日志:

日志显示后台任务的成功执行很可能是因为 result.ready 返回。

调试日志:

我看到您在

docker-compose.yaml
文件中启用了调试模式,建议检查 celery 日志
docker-compose logs celery --tail=1000 -f
以检查任何丢失的日志。

如果我缺少某些内容,请告诉我您希望看到的内容,例如 svg 徽标或 ASCII 日志。

© www.soinside.com 2019 - 2024. All rights reserved.