Как я могу использовать системную переменную среды внутри INI-файла пирамиды?
Я экспортировал переменную с именем DBURL='postgresql://string'
и я хочу использовать его в моем файле конфигурации INI, например:
[app:kotti]
sqlalchemy.url = %(DBURL)s
Это не работает.
2 ответа
Решение
Поместите это в свой __init__.py
:
def expandvars_dict(settings):
"""Expands all environment variables in a settings dictionary."""
return dict((key, os.path.expandvars(value)) for
key, value in settings.items())
Затем, когда вы экспортируете переменную окружения в вашу оболочку, правильный синтаксис таков:
sqlalchemy.url = ${DBURL}
Как только у вас есть эта переменная среды, установленная в вашем .ini
, тогда вы можете использовать синтаксис configparser:
sqlalchemy.connection = %(sqlalchemy.url)s%(user:pass and other stuff)s
PasteDeploy (здесь используется пирамида формата ini) не поддерживает чтение непосредственно из переменных среды. Пара общих вариантов:
1) Установите эту опцию самостоятельно в своем main
,
import os
def main(global_config, **settings):
settings['sqlalchemy.url'] = os.environ['DBURL']
config = Configurator(settings=settings)
...
2) Определите свой INI-файл как шаблон jinja2 и получите команду для его вывода в INI-формат, и просто запустите его как часть процесса развертывания.