web-dev-qa-db-fra.com

Comment utiliser virtualenvwrapper dans Supervisor?

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?

21
MLister

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
49
dm03514

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
7
Stephen Fuhry

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].

3
onur güngör