Lorsque je développais et testais mon projet, j'avais l'habitude d'utiliser virtualenvwrapper pour gérer l'environnement et l'exécuter:
workon myproject
python myproject.py
Bien sûr, une fois que j'étais dans le bon virtualenv, j'utilisais la bonne version de Python et d'autres bibliothèques correspondantes pour exécuter mon projet.
Maintenant, je veux utiliser Supervisord pour gérer le même projet car il est prêt pour le déploiement. La question est quelle est la bonne façon de dire à Supervisord d'activer le bon virtualenv avant d'exécuter le script? Dois-je écrire un script bash distinct qui fait cela et appeler ce script dans le champ de commande du fichier de configuration Supervisord?
Une façon d'utiliser votre virtualenv à partir de la ligne de commande est d'utiliser l'exécutable python situé à l'intérieur de votre virtualenv.
pour moi j'ai mes envs virtuels dans .virtualenvs
répertoire. Par exemple
/home/ubuntu/.virtualenvs/yourenv/bin/python
pas besoin de workon
pour un supervisor.conf
gérer une application tornade que je fais:
command=/home/ubuntu/.virtualenvs/myapp/bin/python /usr/share/nginx/www/myapp/application.py --port=%(process_num)s
Ajoutez votre chemin virtualenv/bin à votre supervisord.conf
's 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
Première exécution
$ workon myproject
$ dirname `which python`
/home/username/.virtualenvs/myproject/bin
Ajoutez ce qui suit
environment=PATH="/home/username/.virtualenvs/myproject/bin"
au supervord.conf correspondant sous la section [programme: blabla].