所以这似乎是这个设置的一个非常普遍的问题,但我找不到任何适用于SO的解决方案.我已经设置了一个非常新的Ubuntu 15.04服务器,然后安装了nginx,virtualenv(和-wrapper)和uWSGI(通过apt-get,所以全局,不在virtualenv中).
我的virtualenv位于/root/Env/example.在virtualenv里面,我安装了Django,然后在/ srv/www/example/app startproject用项目名称运行Django的命令example,所以我隐约有这个结构:
-root
-Env
-example
-bin
-lib
-srv
-www
-example
-app
-example
manage.py
-example
wsgi.py
...
Run Code Online (Sandbox Code Playgroud)
我的uWSGI的example.ini文件如下所示:
[uwsgi]
project = example
plugin = python
chdir = /srv/www/example/app/example
home = /root/Env/example
module = example.wsgi:application
master = true
processes = 5
socket = /run/uwsgi/app/example/example.socket
chmod-socket = 664
uid = www-data
gid = www-data
vacuum = true
Run Code Online (Sandbox Code Playgroud)
但无论我是uwsgi --ini /etc/uwsgi/apps-enabled/example.ini通过守护进程还是通过守护进程运行,我都会得到完全相同的错误:
Python version: 2.7.9 (default, Apr 2 2015, 15:37:21) [GCC 4.9.2]
Set PythonHome to /root/Env/example
ImportError: No module named site
Run Code Online (Sandbox Code Playgroud)
我应该注意到Django项目是通过内置开发服务器工作的./manage.py runserver,当我删除home = /root/Env/example这个东西时(但显然使用的是全局Python和Django而不是virtualenv版本,这意味着它对于正确的virtualenv设置没用) .
任何人都可以看到一些我没有看到的明显路径错误吗?据我所知,home基于我的目录结构和ini中的其他所有内容完全正确,那么为什么它不能处理这个ImportError?
就我而言,我看到了这个问题,因为我尝试运行的django应用是用python 3编写的,而uwsgi是为python 2配置的。我通过以下方法解决了该问题:
plugins = python35 # or whatever you specified while compiling uwsgi
Run Code Online (Sandbox Code Playgroud)
对于使用Django的其他人,您还应该确保正确指定以下内容:
# Django dir that contains manage.py
chdir = /var/www/project/myprojectname
# Django wsgi (myprojectname is the name of your top-level project)
module = myprojectname.wsgi:application
# the virtualenv you are using (full path)
home = /home/ubuntu/Env/mydjangovenv
plugins = python35
Run Code Online (Sandbox Code Playgroud)
Fre*_*jer -5
该site模块位于 django 的根目录中。
首先检查是手动激活 virtualenv(source /root/Env/example/bin/activate、启动 python 和import site)。如果失败,请 pip install django。
假设 django 已正确安装在 virtualenv 中,请确保 uWSGI 激活 virtualenv。相关uWSGI配置指令:
plugins = python
virtualenv = /root/Env/example
Run Code Online (Sandbox Code Playgroud)
如果导入时出错example.wsgi:
pythonpath = /srv/www/example/app/example
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10975 次 |
| 最近记录: |