【发布时间】:2019-08-21 14:02:43
【问题描述】:
要让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?
【问题讨论】:
-
如果你在命令行启动 gunicorn,它会起作用吗?
-
supervisord在启动时是继承您的环境,还是创建自己的环境?进入venv只是设置了一些环境变量,所以需要确保在supervisord的环境中正确设置。 -
@SuperShoot 啊!好点子。不,它没有。您能否在调试此问题的道路上提出另一条线索?
-
@chepner “继承环境”是什么意思?无论 (bash) shell 是否在 venv 中,它都会失败。
supervisord的environment是 IIUC,用于环境变量,而不是用于 Python 虚拟环境。 -
进入 Python 虚拟环境只不过是在您的环境中将适当的目录添加到
PATH。如果supervisord的PATH不包含/home/ubuntu/venv/bin,则它不会使用正确的Python 解释器。
标签: python flask gunicorn supervisord python-venv