如何在Celery中使用config_from_envvar?

时间:2017-10-12 12:56:51

标签: python flask configuration celery

我正在尝试使用外部文件配置Celery,以将配置与代码分开。 Celery和Flask都有.htaccess个方法,除了它们的行为有点不同,我所做的只适用于Flask。

烧瓶

基本上,在Flask,我做

config.from_envvar() / config_from_envvar()

加载存储在应用程序代码中的默认配置,然后加载存储在文件系统中任何位置的设置文件,并使用一些自定义设置覆盖默认文件中的设置。我只需要编写该文件并将其路径传递给环境变量。

Flask docsthis answer中有更多内容。我发现Flask将文件视为Python文件时有点含糊不清,而示例使用app.config.from_object(config_class) app.config.from_envvar('SETTINGS_FILE', silent=True) (无{{1}扩展)但它工作正常)。

芹菜

当对Celery做同样的事情时,我收到了这个错误:

settings.cfg

我将文件命名为.pyImportError: No module named '/absolute/path/to/settings' 扩展名,以防万一。)

我不知道把文件放在哪里。我见过的例子,例如在this question的答案中,将配置文件放在代码中,这正是我想要避免的。

1 个答案:

答案 0 :(得分:1)

既然你既不想操纵element也不想把配置文件放在应用程序目录下,那么剩下的唯一选择就是从文件路径加载配置:

PYTHONPATH
BTW,据我所知,大多数(如果不是全部)芹菜配置选项名称与烧瓶没有冲突,你可以将它们一起写入一个文件,让烧瓶装入它,然后芹菜可以从烧瓶中读取配置:

def load_config_from_file(celery_app, filepath):
    conf = {}
    with open(filepath) as fp:
        exec(compile(fp.read(), filepath, 'exec'), {}, d)
    celery_app.config_from_object(conf)