我需要在 Heroku 上部署使用 Celery 的 Django 應用程序。該網站已經部署并運行良好,但 Celery worker 無法啟動。這是heroku logs -t -p celery命令的輸出:2020-05-20T16:37:23.529208+00:00 heroku[celery.1]: State changed from starting to up2020-05-20T16:37:26.576179+00:00 heroku[celery.1]: State changed from up to crashed2020-05-20T16:37:26.580191+00:00 heroku[celery.1]: State changed from crashed to starting2020-05-20T16:37:26.438750+00:00 app[celery.1]: Error:2020-05-20T16:37:26.438775+00:00 app[celery.1]: Unable to load celery application.2020-05-20T16:37:26.438776+00:00 app[celery.1]: Module 'forum' has no attribute 'celery'我的Procfile:web: gunicorn --pythonpath forum forum.wsgi --log-file -celery: celery worker -A forum -l info -c 4forum/celery.py文件:import osfrom celery import Celeryos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'forum.settings')app = Celery('forum')app.config_from_object('django.conf:settings', namespace='CELERY')# Load task modules from all registered Django app configs.app.autodiscover_tasks()forum/__init__.py文件:# This will make sure the app is always imported when# Django starts so that shared_task will use this app.from .celery import app as celery_app__all__ = ('celery_app',)在forum/settings.py文件中,我有以下與 Celery 相關的參數:# REDIS related settingsREDIS_HOST = 'localhost'REDIS_PORT = '6379'CELERY_BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}# for HerokuCELERY_BROKER_URL = os.environ.get('REDIS_URL', 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0')CELERY_RESULT_BACKEND = os.environ.get('REDIS_URL', 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0')我的 Django 項目(forum)有幾個應用程序,registration應用程序是我的 Celery 任務所在的位置。所以,該項目有registration/tasks.py文件:我將使用免費的 Heroku dynos(因為這只是我最喜歡的學習項目)。但我懷疑原因不在 Heroku 定價計劃中,而是在Procfile.Heroku Redis 插件已啟動并正在運行。但是,我嘗試通過Procfile多種方式進行更改,但結果是一樣的——Celery worker 無法啟動,它崩潰了。在我的本地機器上,Celery 運行良好。我通過以下命令運行 Celery(假設我之前通過redis-server命令啟動了 Redis 服務器):celery worker -A forum --loglevel=debug --concurrency=4有人可以幫我解決這個問題嗎?
1 回答

浮云間
TA貢獻1829條經驗 獲得超4個贊
問題出在整個 Django 應用程序的錯誤結構上。我有類似的東西:
pet
|-- forum
| |-- forum
| | |-- __init__.py
| | |-- celery.py
| | |-- wsgi.py
| | |-- asgi.py
| | |-- settings.py
| | |-- urls.py
| |-- app1
| |-- app2
| |-- appN
| |-- manage.py
| |-- Procfile
| `-- requirements.txt
該pet/forum/文件夾是多余的。forum包含文件的文件夾settings.py或celery.py應直接放置在該pet文件夾下,與所有其他應用程序的文件夾處于同一級別。
此外,在這些更改之后,我需要修改Procfile:
web: gunicorn forum.wsgi --log-file -
celery: celery worker -A forum -l info -c 4
添加回答
舉報
0/150
提交
取消