当我尝试在Django应用程序中启动芹菜工作时:
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'
如果你知道如何解决它,请写下你的想法!
答案 0 :(得分:19)
如果在解析设置时引发异常,则会出现错误。例如当我们通过环境变量设置Django的SECRET_KEY
(或任何其他设置)时:
SECRET_KEY = os.environ['SECRET_KEY']
要解决此问题,您可以切换回:
SECRET_KEY = "asdfasdfasdf"
或使用:
SECRET_KEY = os.environ.get('SECRET_KEY', '')
如果您在celery.py
文件中注释以下行并再次启动工作人员,您还可以找到导致问题的设置:
app.config_from_object('django.conf:settings', namespace='CELERY')
答案 1 :(得分:1)
我想添加两件事:
当您从任何配置文件而不是django的配置文件中加载设置时,也是如此。这个问题纯粹与芹菜有关。
有关此隐性错误的起源的一些解释:
worker_state_db
是具有默认值的设置,因此您不必手动进行设置。引发异常是因为Settings
仅是空的并且没有任何值,甚至没有默认值。也就是说,我们没有加载默认配置。在Celery中,以某种方式,解析的异常(导致问题的原始异常)在启动工作线程时不会传播到stderr。因此,您收到一条消息,其中没有告诉您任何可能的解决方案。
如何解决?
例如,如果您在celeryconfig.py
中放置了celery应用程序模块,并通过以下方式从那里加载设置:
app.config_from_object('path.to.your.celery.module.celeryconfig')
检查整个celeryconfig.py
文件中是否有可能崩溃或导致解析器崩溃的设置(不兼容的设置值?)。
答案 2 :(得分:1)
当我的config.json中丢失了其中一个键时,我遇到了同样的错误,该键被加载到settings.py中(基本上是settings.py中一个丢失的键)。
错误文本完全不相关。 希望有帮助!
答案 3 :(得分:0)
在尝试用dockerized django项目配置celery时,我一遍又一遍。解决方案是在docker-compose.yaml中添加env_file
:
celery:
...
env_file: .env