Flask应用程序中的应用程序上下文错误与Docker中的Celery

时间:2018-11-27 17:58:34

标签: python docker flask celery

我正在尝试在Docker中使用Flask和Celery,并且Flask应用程序上下文存在问题。

烧瓶== 1.0.2 芹菜== 4.2.0 Flask-CeleryExt == 0.3.1

这是一些相关的代码。

docker-compose.yaml

version: '3'

services:
  myapp:
    build:
      context: .
      dockerfile: compose/dev/myapp/Dockerfile
    ports:
      - '5000:5000'
      - '8888:8888'
    env_file: .env
    environment:
      - FLASK_ENV=development
    volumes:
      - .:/myapp
    entrypoint: /wait-for-postgres.sh
    command: flask run --host=0.0.0.0
    depends_on:
      - postgres
      - redis
    networks:
      - flask-redis-celery

  celery:
    build:
      context: .
      dockerfile: compose/dev/celery/Dockerfile
    command: 'celery -A myapp.tasks worker -Q default --loglevel=info'
    env_file: .env
    volumes:
      - .:/myapp
    depends_on:
      - redis
      - myapp
    networks:
      - flask-redis-celery

extensions.py

from flask_celeryext import FlaskCeleryExt
ext = FlaskCeleryExt()

app.py register_extensions函数中。我在我的应用程序中使用了应用程序工厂模式。

ext.init_app(app)

myapp容器中,我可以按documentation到达ext.celery,看到我有一个Celery实例,并正确地将任务发送到

<Celery default at 0x7f600d0e7f98>

但是,尝试在我的tasks文件中的芹菜容器中执行相同操作会导致ext.celery为None。

tasks.py

from coupon.extensions import ext
celery = ext.celery # This is None

@celery.task(name='tasks.my_task', max_retries=2, default_retry_delay=60)
def my_task(some_args):
    # etc.

错误

AttributeError: 'NoneType' object has no attribute 'task'

我也尝试了许多其他选择,包括Flask docs中提到的make_celery,但是无法到达Flask和我的芹菜容器中的模型,因此不要认为这是非常特定的Flask-CeleryExt。

如果Celery任务不访问Flask对象,则可以使它们正常工作,但是我需要从Celery任务访问SQLAlchemy模型和自定义类。

如何使芹菜在芹菜容器中正常工作并能够访问Flask对象?

0 个答案:

没有答案