首页 > 解决方案 > 使用 mod_wsgi、Django、Celery 和 RabbitMQ 每秒重新加载的 DisabledBackend 错误

问题描述

我正在使用 django、celery 和 RabbitMQ 作为网络服务器。在我的开发服务器上一切正常。但是,当我尝试使用 apache2/mod_wsgi 在我的生产服务器上运行网络服务器时,我每次重新加载结果页面时都会收到以下错误:“DisabledBackend”对象没有属性“_get_task_meta_for”

当我尝试运行以下命令时会发生这种情况:

task_state = <taskname>.AsyncResult(task_id).state

我的 CeleryConfiguration 如下:

app = Celery('<name>',
             broker='amqp://<user>:' + RABBITMQ_PASSWD + '@localhost:5672/<vhost>',
             backend='django-db',
             task_ignore_result=False,
             task_track_started=True,
            )

后端已设置好,并且每隔一秒就会准确运行一次。我尝试重新启动服务、计算机并清理数据库。不同的后端有同样的问题。有谁知道可能导致问题的原因?

谢谢您的帮助!

编辑:我已经在这里查看了解决方案:Celery with RabbitMQ: AttributeError: 'DisabledBackend' object has no attribute '_get_task_meta_for'但我认为我的问题与 django 设置无关。在我的开发服务器上,我没有遇到任何问题。只有在我的生产服务器上,后端每秒钟都会“丢失”一次。如果我在看到错误后按然后重新加载,则网页显示正确。如果我再次按重新加载,则会再次显示错误。但我找不到任何理由。我搜索了 rabbitmq 日志、apache 日志、celery 日志,但我无法确定原因。

编辑 2:经过更多测试,在我看来问题出在 apache2/wsgi 上,因为如果我将生产服务器与正常的 celery 设置一起使用,一切正常。只有当我切换到 apache/mod_wsgi 时才会发生错误。

编辑 3:问题是由使用此处推荐的 WSGIDeaemonprocess 引起的:https ://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/modwsgi/ 。我在虚拟主机中的配置如下所示:

WSGIScriptAlias / <path>/wsgi.py
WSGIDaemonProcess <name> python-home=<path to virtualenv> python-path=<path to django project>
WSGIProcessGroup <name>
WSGIApplicationGroup %{GLOBAL}

然后我每隔一秒重新加载都会收到错误。但是,当我删除这些行并在虚拟主机配置之外使用以下行时,一切正常:

WSGIScriptAlias /  <path>/wsgi.py
WSGIPythonHome <path to virtualenv>
WSGIPythonPath <path to django project>

标签: djangorabbitmqceleryapache2mod-wsgi

解决方案


推荐阅读