开始芹菜工人抛出"没有属性' worker_state_db'"

时间:2016-12-01 16:30:59

标签: python django celery

当我尝试在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'

如果你知道如何解决它,请写下你的想法!

4 个答案:

答案 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)

我想添加两件事:

  1. 当您从任何配置文件而不是django的配置文件中加载设置时,也是如此。这个问题纯粹与芹菜有关。

  2. 有关此隐性错误的起源的一些解释:

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