我有一个名为UserApp的模型,我通过Celery从一个异步任务中进行查询,但是从docker compose的输出中得到了以下错误。
postgres_1 |错误:在以下位置不存在关系“ users_userapp” 字符536
celery_1 | django.db.utils.ProgrammingError:关系 “ users_userapp”不存在
这是任务的代码:
@app.task(bind=True, default_retry_delay=50, max_retries=10, ignore_result=False)
def send_reset_password_email_task(self, muser):
user = UserApp.objects.get(pk=muser.get('id'))
print("send_reset_password_email_task user: ",user)
从视图执行的查询没有问题,以同样的方式,如果我在没有视图延迟的情况下同步调用任务,它也在没有问题的情况下运行,我已经运行了迁移并且问题也没有得到解决。 / p>
我非常感谢您的帮助。
答案 0 :(得分:0)
我发现了问题,这是因为docker compose文件中的配置错误,这是我的文件。
version: '2'
volumes: postgres_data_develop: {} postgres_backup_develop: {}
services: postgres:
build: ./compose/postgres
volumes:
- postgres_data_develop:/var/lib/postgresql/data
- postgres_backup_develop:/backups
environment:
- POSTGRES_USER=cxc_web
ports:
- "5432:5432"
django:
build:
context: .
dockerfile: ./compose/django/Dockerfile-dev
command: python /app/manage.py runserver_plus 0.0.0.0:8000
depends_on:
- postgres
environment:
- POSTGRES_USER=cxc_web
- USE_DOCKER=yes
volumes:
- .:/app
ports:
- "8000:8000"
links:
- postgres
redis:
image: "redis:alpine"
#celery celery:
build:
context: .
dockerfile: ./compose/django/Dockerfile-dev
command: celery -A config.settings worker -l info
#command: ./celery/run_celery.sh
volumes:
- .:/app
#- .:/code
depends_on:
- postgres
- redis celery-beat:
build:
context: .
dockerfile: ./compose/django/Dockerfile-dev
command: celery -A config.settings beat -l info
volumes:
- .:/app
depends_on:
- postgres
- redis
由于“环境”的配置:-POSTGRES_USER = cxc_web,在django服务中,该应用程序已连接到“ cxc_web”数据库,而其他服务已使用该服务的默认名称连接到该数据库。情况称为postgres。因此,在两个芹菜胶束中还添加了“环境:-POSTGRES_USER = cxc_web”,并解决了问题。