【问题标题】:Celery worker getting crashed on Heroku芹菜工人在 Heroku 上坠毁
【发布时间】:2019-12-13 03:52:34
【问题描述】:

我正在处理一个Django 项目,我已经推动了Heroku,对于后台任务我使用了Celery。虽然 Celery 在本地运行良好,但在 Heroku 服务器上,我观察到 celery 工作人员正在崩溃。我已经在settings.py 中正确设置了CLOUDAMQP_URL,并在Procfile 中配置了worker 配置,但是worker 仍然崩溃。

过程文件

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

ma​​nage.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)

【问题讨论】:

  • 在你的manage.py中,当你提到你的芹菜路径时,你输入的是完整路径吗?示例:/opt/app/venv/bin/celery 不仅仅是“celery”
  • @IgorServulo 您好,我已在manage.py 中添加代码,请查看更新后的帖子。
  • 就是这样,当您使用 execute_from_command_line 执行关键字 celery 或 heroku 上未安装 celery 时,您的 heroku 服务器都找不到关键字 celery 的 PATH。您是否在配置文件中输入了应用程序需要 celery?我看到你将 manage.py 指定为 worker,但它应该用类似的东西定义:worker: celery worker --app=tasks.app.
  • @IgorServulo 我需要在Procfile 中写worker: celery worker --app=tasks.app
  • @IgorServulo 我在Procfile 中进行了以下更改,但同样的错误仍然存​​在web: gunicorn resume_filter_tool.wsgi --log-file -worker: celery worker -A tasks.app -l infoworker: python manage.py celery worker -l info

标签: python django heroku celery django-celery


【解决方案1】:

我在Procfile 中进行了以下更改并解决了错误

web: gunicorn my_django_app.wsgi --log-file -
worker: celery -A my_django_app worker -l info

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-28
    • 2014-08-17
    • 2022-01-08
    • 2014-06-09
    • 2019-03-13
    • 1970-01-01
    • 2021-10-24
    • 2020-01-02
    相关资源
    最近更新 更多