当我尝试在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'
如果你知道如何解决这个问题,请写下你的想法!
5条答案
按热度按时间0tdrvxhp1#
如果在分析设置时引发异常,则会出现此错误。例如当我们通过环境变量设置Django的
SECRET_KEY
(或任何其他设置)时:要解决此问题,您可以切换回:
或用途:
如果您在
celery.py
文件中注解以下行并再次启动worker,您还可以找到导致问题的设置:qqrboqgw2#
当我在www.example.com中加载的config.json中缺少一个键时,我也遇到了同样的错误settings.py(基本上是settings.py中缺少一个键)。
错误文本完全无关紧要。希望有帮助!
relj7zay3#
我想补充两点:
1.当你从任何配置文件加载设置时也是如此,而不是本质上的django。这个问题纯粹与celery 有关。
1.关于这个神秘错误的起源的一些解释:
worker_state_db
是一个具有默认值的设置,因此您不必手动设置它。引发异常是因为Settings
为空,没有任何值,甚至没有默认值。也就是说,我们没有加载默认配置。在Celery中,解析异常(导致问题的原始异常)在启动worker时不会传播到stderr。因此,您得到的消息不会告诉您任何可能的解决方案。怎么修?例如,如果您有
celeryconfig.py
,其中放置了celery应用程序模块,并且您通过以下方式从那里加载设置:检查整个
celeryconfig.py
文件中是否有任何可能导致解析器崩溃的内容(不兼容的设置值?)).bd1hkmkf4#
我在尝试用django项目配置celery时反复遇到这个问题。解决方案是在docker-compose.yaml中包含
env_file
:dnph8jn45#
Celery(一般情况下,不仅仅是Django)尝试首先从它的配置文件中加载配置。
错误原因:
Celery加载配置文件,但引发ANY异常。Celery将显示以下错误消息:
非常常见的例子:
假设您的配置文件需要Celery配置文件中的
BROKER_PASSWORD
环境变量。但是!!
您忘记了使环境变量
BROKER_PASSWORD
可用...因此,该代码将产生KeyError
。这将使Celery感到困惑,因此将显示上述消息。