运行多个uwsgi python版本

我试图用uwsgi部署django,我想我对它的工作原理缺乏了解。 我有uwsgi在皇帝模式下运行,我试图让vassals在自己的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和环境启动。 我现在认为这是错误的。

我想要做的是用系统python运行uwsgi master进程,但是运行带有自己的python和他们自己的库的各种vassals(应用程序)。 这可能吗? 或者如果我想运行多个python,我将不得不运行多个皇帝? 有点击败了虚拟环境的目的。


“优雅”的方式是将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得到遵守)。

话虽如此,每个python版本都有一个uWSGI Emperor也是可行的。 记住皇帝是可堆叠的,所以你可以有一个普通的皇帝为每个python版本产生一个皇帝(作为它的附属物)。

链接地址: http://www.djcxy.com/p/65935.html

上一篇: Running multiple uwsgi python versions

下一篇: Django + uwsgi + nginx redirect to default page "Welcome to NGINX"