首页 > 解决方案 > 从父文件夹启动 Celery Worker 时出错

问题描述

我正在尝试在 Heroku 上部署我的 Flask 项目,但是我在从src.

我的 Flaskproject有以下树:

.project
├── Procfile
├── README.md
├── requirements.txt
└── src
    ├── app.py
    ├── blueprints
    │   ├── __init__.py
    │   ├── error_pages.py
    │   └── profile.py
    ├── static
    │   └── ...
    └── templates
        └── ...

在 app.py 我有:

from flask import Flask
from celery import Celery
import blueprints

app = Flask(__name__)

# Load the config file
app.config.from_pyfile('config.cfg')

# Initialises celery background tasks handler
celery = Celery(main=app.name, backend=app.config['REDIS_URL'], broker=app.config['REDIS_URL'],
                include=['blueprints.profile'])
celery.conf.update(app.config)
app.celery = celery

如果我在.project/src并且我使用:

celery -A app.celery worker -l INFO

我的工人开始时没有问题。但是,例如,我无法弄清楚如何从根目录启动我的工作人员。

这就是我的 Procfile 现在的样子。

web: gunicorn --chdir ./src app:app
worker: celery -A ??????

有什么想法吗?

标签: flaskherokuceleryworker

解决方案


我认为您应该使用该代码:

celery -A src.app.celery_file worker --loglevel=debug -B

(-B:用于 Beat)Celery 配置示例:

from celery import Celery
celery = Celery(__name__)
celery = Celery('tasks', broker=) # rabbit,redis, ..
celery.conf.update({'CELERY_ACCEPT_CONTENT': ['pickle', 'json', 'msgpack', 'yaml']})
celery.conf.add_defaults(...)

celery.conf.update(CELERYBEAT_SCHEDULE={
    'db_connect_things': {
        'task': 'application.lib.tasks.db_connect_things',
        'schedule': crontab(minute=0, hour='*/12'),
    }})

class ContextTask(celery.Task):
...

推荐阅读