我正在尝试使用外部文件配置Celery,以将配置与代码分开。 Celery和Flask都有.htaccess
个方法,除了它们的行为有点不同,我所做的只适用于Flask。
基本上,在Flask,我做
config.from_envvar() / config_from_envvar()
加载存储在应用程序代码中的默认配置,然后加载存储在文件系统中任何位置的设置文件,并使用一些自定义设置覆盖默认文件中的设置。我只需要编写该文件并将其路径传递给环境变量。
(Flask docs或this answer中有更多内容。我发现Flask将文件视为Python文件时有点含糊不清,而示例使用app.config.from_object(config_class)
app.config.from_envvar('SETTINGS_FILE', silent=True)
(无{{1}扩展)但它工作正常)。
当对Celery做同样的事情时,我收到了这个错误:
settings.cfg
我将文件命名为.py
(ImportError: No module named '/absolute/path/to/settings'
扩展名,以防万一。)
我不知道把文件放在哪里。我见过的例子,例如在this question的答案中,将配置文件放在代码中,这正是我想要避免的。
答案 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)