gpt4 book ai didi

python - Flask虚拟环境和环境变量

转载 作者:行者123 更新时间:2023-12-01 01:05:05 26 4
gpt4 key购买 nike

要让supervisord下的gunicorn使用虚拟环境/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

最佳答案

这是一个食谱:

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

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

使用dotenvload_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"

并且它们传递到子进程,而不会干扰supervisordenvironment=

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

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

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

$ curl localhost:8000
ABCDEFGH

杀死supervisord。由于它位于前台,因此 CTRL-c 就足够了。

supervisord 作为守护进程启动。

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

密切关注三个日志文件 prog/hello_out.logprog/hello_err.logprog/hello_supervisord.log .

也许最重要的一点是避免使用supervisordenvironment=。 SO 聊天表明它可以处理逗号、引号、制表符,甚至换行符。从经验来看,这并不成立(至少对于 supervisord 3.3.5 而言),并且文档也没有以某种方式解决这个问题。两行942-943似乎是parsing的地方如果有人愿意调查文档的不足,就会发生这种情况。

关于python - Flask虚拟环境和环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55437599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com