В стеке python/flask/gunicorn/heroku
мне нужно установить переменную среды на основе содержимого другой переменной env.
Для фона я запускаю приложение Python/Flask на героку. Я общаюсь с надстройкой через переменную среды, которая содержит учетные данные и URL-адрес. Библиотеке, которую я использую для связи с надстройкой, нужны эти данные, но в другом формате. Кроме того, он нужен в качестве переменной среды.
До сих пор я клонировал и переформатировал переменную окружения вручную, но это только привело к катастрофе, потому что поставщик дополнений менял пароли.
Итак, мне нужно автоматизировать чтение одной переменной среды и установку другой, прежде чем библиотека начнет ее искать.
Наивный подход, который я пробовал, был (файл app.py
):
app = Flask(__name__, ...)
env_in = os.environ['ADDON_ENV_VAR']
os.environ['LIB_ENV_VAR'] = some_processing(env_in)
...
if __name__ == '__main__':
app.run(host='0.0.0.0', port='5000')
Это прекрасно работает при выполнении python app.py
для отладки, но не работает при запуске через gunicorn app:app -b '0.0.0.0:5000'
(как Procfile
для foreman
) для развертывания реального веб-сервера. Во втором случае env var, похоже, не доходит до уровня ОС. Я не уверен в том, как работает wsgi, но, возможно, среда изменится, как только gunicorn запустит приложение.
Что я могу сделать, чтобы установить переменную среды в нужном месте?