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 指点我那件事!
我在 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 指点我那件事!