Celery 任务没有将对象添加到数据库 Django/Postgres

Celery tasks are not adding object to db Django/Postgres

我在 docker 中使用 celery 时遇到问题,它接收任务并在终端发送一切正常,但它在数据库中没有创建任何内容(我使用 Postgres)。我认为这个问题在 docker 某处,但不确定。 Consol 不会给出任何错误。在互联网上找不到任何相关信息,请帮我解决这个问题

我的docker-撰写文件:

version: "3"
services:
  app:
    build:
      context: .
    ports:
       - "8000:8000"
    volumes:
       - ./app:/app
    command: >
       sh -c "python manage.py wait_for_db &&
              python manage.py makemigrations &&
              python manage.py migrate &&
              python manage.py test&&
              python manage.py runserver 0.0.0.0:8000"

    environment:
       - DB_HOST=db
       - DB_NAME=app
       - DB_USER=postgres
       - DB_PASS=supersecretpassword
       - CELERY_BROKER=redis://redis:6379/0
       - CELERY_BACKEND=redis://redis:6379/0
    depends_on:
       - db
  db:
    image: postgres:13-alpine
    environment:
       - POSTGRES_DB=app
       - POSTGRES_USER=postgres
       - POSTGRES_PASSWORD=supersecretpassword

redis:
   ports:
     - "6379:6379"
   image: redis:5-alpine

celery-beat:
  build: .
  user: root
  command: celery -A app beat -l INFO
  environment:
    - DB_HOST=db
    - CELERY_BROKER=redis://redis:6379/0
    - CELERY_BACKEND=redis://redis:6379/0
  depends_on:
    - db
    - redis
    - celery

celery:
  build: .
  user: root
  command: celery -A app worker -l INFO --pool=solo
  environment:
    - DB_HOST=db
    - CELERY_BROKER=redis://redis:6379/0
    - CELERY_BACKEND=redis://redis:6379/0
  depends_on:
    - db
    - redis

我的celery.py

import os
from celery import Celery
from celery.schedules import crontab
from app.settings import INSTALLED_APPS

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app.settings')

app = Celery('app')

app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()


app.conf.beat_schedule = {
   'add-every-5-seconds': {
      'task': 'transactions.tasks.create_transaction',
      'schedule': 5.0,
    },
}

和我的任务

@shared_task
def create_transaction():
   transaction = Transaction.objects.create()
   return transaction.id

终于找到原因了。问题出在 settings.py 中错误的 Celery 配置。感谢 Niel Godfrey Ponciano 指点我那件事!