我正试图将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.4pyvenv。uwsgi是系统uwsgi(python2.6)。我的印象是皇帝可以是任何python版本,因为附庸会用自己的python和环境启动,由主进程启动。我现在认为这是错误的。
我想做的是用系统python运行uwsgi主进程,但是用它们自己的python和它们自己的库运行各种附属程序(应用程序)。这可能吗?或者,如果我想经营多条Python,我就必须经营多个皇帝吗?有点违背了拥有虚拟环境的目的。
“优雅”的方法是将uWSGI python支持构建为一个插件,并为每个python版本提供一个插件:
(来自uWSGI来源)
(将在没有语言支持的情况下构建一个uWSGI二进制文件)
将建立可以加载到附庸中的
python27_plugin.so
将为
python3
等构建插件。构建uWSGI插件的方法多种多样,我所报告的插件是最安全的(它确保了
#ifdef
被遵守)。尽管如此,每个python版本都有一个uWSGI皇帝也是可行的。记住皇帝是可堆叠的,所以你可以让一个通用的皇帝为每一个python版本生成一个皇帝(作为它的附庸)。
相关问题 更多 >
编程相关推荐