我正在开发一个Django
项目,该项目已推向Heroku
,用于后台任务,我使用了Celery
。尽管Celery在本地工作正常,但是在Heroku服务器上,我观察到celery worker崩溃了。我已经在CLOUDAMQP_URL
中正确设置了settings.py
,并在Procfile
中配置了工作程序配置,但是工作程序仍然崩溃了。
Procfile
web: gunicorn my_django_app.wsgi --log-file -
worker: python manage.py celery worker --loglevel=info
Settings.py
...
# Celery
BROKER_URL = os.environ.get("CLOUDAMQP_URL", "django://")
#CELERY_BROKER_URL = 'amqp://localhost'
BROKER_POOL_LIMIT = 1
BROKER_CONNECTION_MAX_RETRIES = 100
CELERY_TASK_SERIALIZER="json"
CELERY_RESULT_SERIALIZER="json"
CELERY_RESULT_BACKEND = "amqp://"
日志
2019-08-05T15:03:51.296563+00:00 heroku[worker.1]: State changed from crashed to starting
2019-08-05T15:04:05.370900+00:00 heroku[worker.1]: Starting process with command `python manage.py celery worker --loglevel=info`
2019-08-05T15:04:06.173210+00:00 heroku[worker.1]: State changed from starting to up
2019-08-05T15:04:09.067794+00:00 heroku[worker.1]: State changed from up to crashed
2019-08-05T15:04:08.778426+00:00 app[worker.1]: Unknown command: 'celery'
2019-08-05T15:04:08.778447+00:00 app[worker.1]: Type 'manage.py help' for usage.
2019-08-05T15:04:09.048404+00:00 heroku[worker.1]: Process exited with status 1
manage.py
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_django_app.settings")
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
答案 0 :(得分:0)
我在Procfile
中进行了以下更改,错误得到解决
web: gunicorn my_django_app.wsgi --log-file -
worker: celery -A my_django_app worker -l info