Запуск нескольких версий uwsgi python
Я пытаюсь развернуть django с uwsgi, и я думаю, что мне не хватает понимания того, как все это работает. У меня uwsgi работает в императорском режиме, и я пытаюсь заставить вассалов работать в их собственных virtualenvs с другой версией python.
настройки императора:
[uwsgi]
socket = /run/uwsgi/uwsgi.socket
pidfile = /run/uwsgi/uwsgi.pid
emperor = /etc/uwsgi.d
emperor-tyrant = true
master = true
autoload = true
log-date = true
logto = /var/log/uwsgi/uwsgi-emperor.log
и вассал:
uid=django
gid=django
virtualenv=/home/django/sites/mysite/venv/bin
chdir=/home/django/sites/mysite/site
module=mysite.uwsgi:application
socket=/tmp/uwsgi_mysite.sock
master=True
Я вижу следующую ошибку в журнале императора:
Traceback (most recent call last):
File "./mysite/uwsgi.py", line 11, in <module>
import site
ImportError: No module named site
virtualenv для моего сайта создается как python 3.4 pyvenv. Uwsgi - это система uwsgi (python2.6). У меня сложилось впечатление, что императором может быть любая версия python, так как вассал будет запущен со своим собственным python и средой, запущенной мастер-процессом. Теперь я думаю, что это неправильно.
то, что я хотел бы сделать, это запустить мастер-процесс uwsgi с системным python, но различные вассалы (приложения) со своим собственным python и своими собственными библиотеками. Возможно ли это? Или мне придется управлять несколькими императорами? если я хочу запустить несколько питонов? Своего рода побеждает цель наличия виртуальных сред.
1 ответов
"элегантный" способ строит поддержку uwsgi python в качестве плагина и имеет плагин для каждой версии python:
(из источников uWSGI)
make PROFILE=nolang
(построит двоичный файл uWSGI без языковой поддержки)
PYTHON=python2.7 ./uwsgi --build-plugin "plugins/python python27"
построить python27_plugin.so
что вы можете загрузить в холопстве
PYTHON=python3 ./uwsgi --build-plugin "plugins/python python3"
построит плагин для python3
и так далее.
существуют различные способы создания плагинов uWSGI, тот, который я сообщаю, является самым безопасным (это гарантирует #ifdef
большая честь).
сказав это, наличие императора uWSGI для каждой версии python также жизнеспособно. Помните, что император штабелируется, поэтому у вас может быть общий император, порождающий одного императора (как его вассала) для каждой версии python.