从父文件夹启动 Celery Worker 时出错

Error starting Celery Worker from Parent Folder

我正在尝试在 Heroku 上部署我的 Flask 项目,但是我在从 src 以外的其他目录启动我的 Celery worker 时遇到问题。

我的 Flask project 有以下树:

.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 ??????

有什么想法吗?

我通过在 src 目录中添加以下 __init__.py 解决了我的问题:

import sys
import os

# Adding the 'src' directory to the python path
sys.path.insert(0, os.path.join(os.getcwd(), 'src'))

然后调用工人使用:

celery -A src.app.celery worker -l INFO

现在,这是我的 Heroku Procfile

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

我认为你应该输入代码:

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

(-B : for 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):
...