django 启动celery worker抛出“no attribute 'worker_state_db'”

wd2eg0qa  于 2023-05-30  发布在  Go
关注(0)|答案(5)|浏览(257)

当我尝试在Django app中启动celery worker时:

celery -A myApp worker -l info

我得到以下错误:

File "/home/alexander/.pyenv/versions/3.5.1/envs/myApp/lib/python3.5/site-packages/celery/utils/collections.py", line 134, in __getattr__
    type(self).__name__, k))

    AttributeError: 'Settings' object has no attribute 'worker_state_db'

如果你知道如何解决这个问题,请写下你的想法!

0tdrvxhp

0tdrvxhp1#

如果在分析设置时引发异常,则会出现此错误。例如当我们通过环境变量设置Django的SECRET_KEY(或任何其他设置)时:

SECRET_KEY = os.environ['SECRET_KEY']

要解决此问题,您可以切换回:

SECRET_KEY = "asdfasdfasdf"

或用途:

SECRET_KEY = os.environ.get('SECRET_KEY', '')

如果您在celery.py文件中注解以下行并再次启动worker,您还可以找到导致问题的设置:

app.config_from_object('django.conf:settings', namespace='CELERY')
qqrboqgw

qqrboqgw2#

当我在www.example.com中加载的config.json中缺少一个键时,我也遇到了同样的错误settings.py(基本上是settings.py中缺少一个键)。
错误文本完全无关紧要。希望有帮助!

relj7zay

relj7zay3#

我想补充两点:
1.当你从任何配置文件加载设置时也是如此,而不是本质上的django。这个问题纯粹与celery 有关。
1.关于这个神秘错误的起源的一些解释:
worker_state_db是一个具有默认值的设置,因此您不必手动设置它。引发异常是因为Settings为空,没有任何值,甚至没有默认值。也就是说,我们没有加载默认配置。在Celery中,解析异常(导致问题的原始异常)在启动worker时不会传播到stderr。因此,您得到的消息不会告诉您任何可能的解决方案。
怎么修?例如,如果您有celeryconfig.py,其中放置了celery应用程序模块,并且您通过以下方式从那里加载设置:

app.config_from_object('path.to.your.celery.module.celeryconfig')

检查整个celeryconfig.py文件中是否有任何可能导致解析器崩溃的内容(不兼容的设置值?)).

bd1hkmkf

bd1hkmkf4#

我在尝试用django项目配置celery时反复遇到这个问题。解决方案是在docker-compose.yaml中包含env_file

celery:
    ...
    env_file: .env
dnph8jn4

dnph8jn45#

Celery(一般情况下,不仅仅是Django)尝试首先从它的配置文件中加载配置。

错误原因:

Celery加载配置文件,但引发ANY异常。Celery将显示以下错误消息:

AttributeError: 'Settings' object has no attribute 'worker_state_db'

非常常见的例子:

假设您的配置文件需要Celery配置文件中的BROKER_PASSWORD环境变量。

broker_password = os.environ['BROKER_PASSWORD']

但是!!

您忘记了使环境变量BROKER_PASSWORD可用...因此,该代码将产生KeyError
这将使Celery感到困惑,因此将显示上述消息。

相关问题