【发布时间】:2019-04-19 19:07:22
【问题描述】:
我的 Docker 应用程序以 Flask 作为后端和 Celery 作为异步任务管理器运行。然后将任务结果转储到 Postgres 拥有的 SQLalchemy 数据库中。
但是,我无法让 Celery 与 Postgres 交互。
配置:
docker-compose-dev.yml
web:
build:
context: ./services/web
dockerfile: Dockerfile-dev
volumes:
- './services/web:/usr/src/app'
ports:
- 5001:5000
environment:
- FLASK_ENV=development
- APP_SETTINGS=project.config.DevelopmentConfig
- DATABASE_URL=postgres://postgres:postgres@web-db:5432/web_dev
- DATABASE_TEST_URL=postgres://postgres:postgres@web-db:5432/web_test
- SECRET_KEY=my_precious
depends_on:
- web-db
- redis
web-db:
build:
context: ./services/web/project/db
dockerfile: Dockerfile
ports:
- 5435:5432
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
celery:
image: dev3_web
restart: always
volumes:
- ./services/web:/usr/src/app
- ./services/web/celery_logs:/usr/src/app/celery_logs
command: celery worker -A celery_worker.celery --loglevel=DEBUG --logfile=celery_logs/celery.log -Q cache
environment:
- CELERY_BROKER=redis://redis:6379/0
- CELERY_RESULT_BACKEND=redis://redis:6379/0
depends_on:
- web
- redis
links:
- redis:redis
- web-db
redis:
image: redis:5.0.3-alpine
restart: always
expose:
- '6379'
ports:
- '6379:6379'
monitor:
image: dev3_web
ports:
- 5555:5555
command: flower -A celery_worker.celery --port=5555 --broker=redis://redis:6379/0
depends_on:
- web
- redis
日志:
celery_1| Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. Defaulting SQLALCHEMY_DATABASE_URI to "sqlite:///:memory:".
如何将 Celery 任务绑定到我的 Postgres 数据库?
【问题讨论】:
-
嗨,data_garden。我想知道我们是否可以再次编辑这个?我编辑这个是因为这里的引号块的用法不是引号,并且内联代码格式的一些用法不是代码。这些格式类型与 HTML 一样具有特定的语义含义,最好不要将它们误用作一般的荧光笔。如果您使用相同的方法有很长的帖子,情况尤其如此。
-
(
Dockerfile和postgres之类的代码格式化是可以的,因为文件名和 Unix 用户经常呈现到控制台。控制台 I/O 使用代码格式化也很好. 但是 Celery、Docker、Flask 等是专有名词,因此应该使用首字母大写(或在适当的情况下使用特殊的大写规则,例如驼峰式或全大写,具体取决于每个名称的正常书写方式) ))。 -
“database”的拼写错误也被重新添加到标题中。
-
肯定一半,做我的客人,随心所欲……
-
谢谢你,data_garden!如果您也能遵守这些约定,志愿编辑将不胜感激 - 如果将来创建新帖子,他们可能不愿意提高您之前帖子的可读性
:-)。
标签: postgresql docker-compose celery flask-sqlalchemy