烧瓶虚拟环境和环境变量

时间:2019-03-31 03:21:39

标签: python flask gunicorn supervisord python-venv

要让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中初始化它们之后?

相关: 1234567

2 个答案:

答案 0 :(得分:0)

这是食谱:

将环境变量写入文件/home/ubuntu/prog/.env

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

使用dotenv的{​​{1}}加载环境变量。

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" 的{​​{1}}。

在前台启动supervisord以确认一切正常。

environment=

从另一个shell确认一切正常。

supervisord

杀死/usr/bin/supervisord -n -edebug -c /etc/supervisor/hello.conf 。由于它位于前台,因此只需CTRL-c就可以了。

$ curl localhost:8000 ABCDEFGH 作为守护程序启动。

supervisord

关注三个日志文件supervisord/usr/bin/supervisord -c /etc/supervisor/hello.conf prog/hello_out.log

也许最重要的一点是避免使用prog/hello_err.log的{​​{1}}。 SO chatter建议它处理逗号,引号,制表符甚至换行符。从经验上讲,这并不成立(至少对于prog/hello_supervisord.log 3.3.5而言),文档也没有以一种或另一种方式解决它。两行942-943 如果有人愿意调查文档的不足之处,似乎是parsing发生的地方。

答案 1 :(得分:0)

要永久,安全地一次导入环境变量,必须在$ HOME目录的 .bashrc 中添加以下行。 为此,使用您喜欢的代码编辑器在主目录中打开 .bashrc 文件:

[my_data] a_variable = 1 b_variable = hello c_variable = world d_variable = 5.4231

.bashrc 文件中的某处添加以下行:

nano .bashrc

现在要在烧瓶中使用此SECRET_KEY,您必须导入os模块并像这样使用它。

export SECRET_KEY="YOUR SECRET KEY."

希望这会有所帮助。

相关问题