erro contexto de aplicação na garrafa aplicativo com o aipo em Docker

votos
0

Eu estou tentando usar o Flask e aipo em Docker e estou tendo problemas com o contexto de aplicação Flask.

Flask == 1.0.2 aipo == 4.2.0 Flask-CeleryExt == 0.3.1

Aqui está um código pertinente.

janela de encaixe-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 numa register_extensionsfunção. Eu estou usando o padrão de fábrica aplicativo em meu aplicativo.

ext.init_app(app)

Dentro do myapprecipiente, que pode chegar a ext.celeryacordo com a documentação e ver que eu tenho uma instância do aipo e corretamente enviar uma tarefa para

<Celery default at 0x7f600d0e7f98>

No entanto, a tentativa de fazer o mesmo no recipiente de aipo em meus tasksresultados de arquivo em ext.celeryestar Nenhum.

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.

Erro

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

Eu tenho tentado inúmeras outras opções, bem incluindo make_celerycomo observado nos docs Flask , mas não pode chegar ao Flask e meus modelos no recipiente aipo, então não acredito que isso é muito específico para Flask-CeleryExt.

Eu posso fazer as tarefas de aipo funcionar bem se não acessar objetos garrafa, mas eu preciso acessar modelos SQLAlchemy e classes personalizadas de minhas tarefas de aipo.

Como posso fazer o trabalho Aipo corretamente no meu recipiente aipo e ser capaz de acessar objetos Flask?

Publicado 27/11/2018 em 17:58
fonte usuário
Em outras línguas...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more