如何使用 Dynaconf 配置 Celery

问题描述

最近我发现了 Dynaconf,这是一个很好的配置管理包,可以很好地与 Flask 和 Django 集成。 Django 应用程序与 Dynaconf 一起运行得非常好。但是,我的应用程序运行后台任务所依赖的 Celery 应用程序不是。

这是在使用 Dynaconf 之前工作的 Celery 应用程序的配置代码

from celery import Celery
app = Celery('KillerApp')
app.config_from_object('django.conf:settings',namespace='CELERY')

看来我需要将 'django.conf:settings' 更改为其他内容。有什么想法吗?

解决方法

可以传入一个字符串表示要导入的模块,也可以直接传入配置对象;请参阅Celery.config_from_object() method documentation

您将拥有一个设置 Dynaconf() 实例的模块,例如如果您有一个名为 acme_project 的包,其中包含一个 config.py 文件,

from dynaconf import Dynaconf

settings = Dynaconf(
    settings_files=['settings.toml','.secrets.toml'],)

然后您可以导入 acme_project.config 并在那里找到 settings 对象。您可以导入该对象,也可以使用 'acme_project.config:settings' 作为传递给 app.config_from_object() 的值让 Celery 执行此操作。 namespace 参数告诉 Celery 期望所有设置都以 CELERY_ 为前缀,这与 Django 的工作方式完全一样。如果您计划使用 Dynaconf 管理的设置来配置多个组件,而不仅仅是 Celery,请使用此选项。

例如,如果您使用:

app.config_from_object('acme_project.config:settings',namespace='CELERY')

那么您的 settings.tomlsettings.yaml 或您选择的任何文件格式都需要使用 CELERY_ 作为所有设置的前缀。

,

如果您使用的是 Django plugin for Dynaconf,那么您可以直接使用 django.conf:settings 作为 Dynaconf 补丁 django 设置对象。

如果您仍有问题,我建议您在 dynaconf repo 上打开一个问题并尝试直接使用您的应用程序的设置。

例如,如果您有一个名为 foo 的应用,您的 DJANGO_SETTINGS_MODULE 可能是 foo.settings,那么您可以将其用于 celery:

app.config_from_object('foo.settings:settings')

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...