Виртуальная среда Flask и переменные среды - PullRequest
0 голосов
/ 31 марта 2019

Чтобы получить gunicorn при supervisord для использования виртуальной среды /home/ubuntu/venv/bin, нет необходимости искать разумное место для размещения source /home/ubuntu/venv/bin/activate.Достаточно написать:

[program:hello]
command=/home/ubuntu/venv/bin/gunicorn -b localhost:8000 hello:app
directory=/home/ubuntu/hello/
environment=PATH="/home/ubuntu/venv/bin:%(ENV_PATH)"

в /usr/supervisor/hello.conf.

Следующая задача состоит в том, чтобы ввести целый ряд окружений переменных .Один из способов заключается в том, чтобы кропотливо дополнить конфигурационный файл supervisord следующим образом.

[program:hello]
...
environment=PATH="/home/ubuntu/venv/bin:%(ENV_PATH)",SECRET_KEY="%(ENV_SECRET_KEY)",DATABASE_URI="%(ENV_DATABASE_URI)",etc1,etc2,etc3

Есть ли способ ввести переменные среды за один раз (после того, как они инициализируются, скажем, в ~/.profile?

Похожие: 1 , 2 , 3 , 4 , 5 , 6 , 7

1 Ответ

0 голосов
/ 01 апреля 2019

Вот рецепт:

Запись переменных среды в файл /home/ubuntu/prog/.env.

export FLASK_APP=/home/ubuntu/prog/hello.py
export SECRET_KEY=ABCD
export DATABASE_PASSWORD=EFGH

Используйте dotenv load_dotenv для загрузки переменных среды.

from flask import Flask
from os.path import join, dirname
from os import environ
from dotenv import load_dotenv

app = Flask(__name__)
dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)

@app.route('/')
def hello():
    SECRET_KEY = environ.get("SECRET_KEY")
    DATABASE_PASSWORD = environ.get("DATABASE_PASSWORD")
    return SECRET_KEY + DATABASE_PASSWORD

Написать файл /etc/supervisor/hello.conf.

[program:hello]
command=/home/ubuntu/venv/bin/gunicorn -b localhost:8000 hello:app
directory=/home/ubuntu/prog
stdout_logfile=/home/ubuntu/prog/hello_out.log
stderr_logfile=/home/ubuntu/prog/hello_err.log
user=ubuntu
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true

[supervisord]
logfile=/home/ubuntu/prog/hello_supervisord.log
pidfile=/tmp/supervisord.pid

Загрузите среду и укажите на приложение.

source /home/ubuntu/prog/.env

Переменные среды теперь загружены,

$ export | grep SECRET
declare -x SECRET_KEY="ABCD"

и они будут переданы подпроцессу без вмешательства supervisord environment=.

Запустите supervisord на переднем плане, чтобы подтвердить, что все хорошо.

/usr/bin/supervisord -n -edebug -c /etc/supervisor/hello.conf

Подтвердите из другой оболочки, что все хорошо.

$ curl localhost:8000
ABCDEFGH

Убить supervisord. Поскольку он находится на переднем плане, достаточно нажать CTRL-c.

Запуск supervisord в качестве демона.

/usr/bin/supervisord -c /etc/supervisor/hello.conf

Следите за тремя файлами журналов prog/hello_out.log, prog/hello_err.log и prog/hello_supervisord.log.

Возможно, самый важный момент - избегать использования supervisord environment=. Так что болтовня говорит о том, что он обрабатывает запятые, кавычки, табуляции и даже переводы строк. Эмпирически, это не имеет места (по крайней мере, для supervisord 3.3.5), и документация не решает это так или иначе. Две строки 942-943 похоже, именно там происходит разбор , если кто-то хочет исследовать недостаточность документов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...