如何在Supervisor中使用virtualenvwrapper?
在我开发和测试项目的时候,我习惯用virtualenvwrapper来管理环境并运行项目:
workon myproject
python myproject.py
当然,当我进入正确的虚拟环境时,我就能使用正确版本的Python,以及运行项目所需的其他库。
现在,我想用Supervisord来管理这个项目,因为它已经准备好部署了。我的问题是,怎样才能正确地告诉Supervisord在执行脚本之前激活正确的虚拟环境呢?我需要写一个单独的bash脚本来完成这个吗,然后在Supervisord的配置文件中调用这个脚本吗?
3 个回答
5
首先,运行
$ workon myproject
$ dirname `which python`
/home/username/.virtualenvs/myproject/bin
然后,在相关的 supervisord.conf 文件中,找到 [program:blabla] 这一部分,添加以下内容:
environment=PATH="/home/username/.virtualenvs/myproject/bin"
12
把你的虚拟环境的路径添加到 supervisord.conf
文件里的 environment
部分:
[program:myproj-uwsgi]
process_name=myproj-uwsgi
command=/home/myuser/.virtualenvs/myproj/bin/uwsgi
--chdir /home/myuser/projects/myproj
-w myproj:app
environment=PATH="/home/myuser/.virtualenvs/myproj/bin:%(ENV_PATH)s"
user=myuser
group=myuser
killasgroup=true
startsecs=5
stopwaitsecs=10
57
从命令行使用你的虚拟环境的一种方法是直接使用虚拟环境里面的python可执行文件。
对我来说,我的虚拟环境都放在.virtualenvs
这个文件夹里。例如:
/home/ubuntu/.virtualenvs/yourenv/bin/python
这样就不需要使用workon
命令了。
在管理一个tornado应用的supervisor.conf
文件中,我会这样做:
command=/home/ubuntu/.virtualenvs/myapp/bin/python /usr/share/nginx/www/myapp/application.py --port=%(process_num)s