【发布时间】: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