【问题标题】:Celery tasks are not adding object to db Django/Postgres芹菜任务没有将对象添加到 db Django/Postgres
【发布时间】:2021-10-16 19:49:01
【问题描述】:

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

我的 docker-compose 文件:

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

【问题讨论】:

  • 我假设您的 Postgresql 容器在默认端口 5432 上运行?我在您的环境变量中看不到它,您是否在 Django 的 settings.py 中正确设置了端口的值?另外,也许您可​​以尝试用DB_HOST=127.0.0.1 替换DB_HOST=db,但我不确定它是否有效。
  • 是的,Postgresql 在 5432 端口。试过 DB_HOST=127.0.0.1,没用。我会检查 settings.py,谢谢!

标签: django postgresql docker-compose celery django-celery


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 2021-04-25
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    相关资源
    最近更新 更多