我按照本指南为我的django Web应用程序配置apache: https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/modwsgi/#basic-configuration
我使用以下命令在ubuntu 15.10服务器上安装了Django,mod_wsgi-express(新方式)和mod_wsgi for apache
pip install Django
pip install mod_wsgi
sudo aptitude install libapache2-mod-wsgi
接下来我将以下内容添加到: /etc/apache2/apache2.conf
WSGIScriptAlias / /home/user/mysite/mysite/wsgi.py
WSGIPythonPath /home/user/mysite:/home/user/.local/lib/python2.7/site-packages
<Directory /home/user/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
但是当我启动apache时,我得到以下错误:
[Sat Mar 26 12:10:06.876025 2016] [wsgi:error] [pid 10622:tid 139806697674496] [client 217.40.250.17:52124] from django.core.wsgi import get_wsgi_application
[Sat Mar 26 12:10:06.876057 2016] [wsgi:error] [pid 10622:tid 139806697674496] [client 217.40.250.17:52124] ImportError: No module named django.core.wsgi
但该模块确实存在于我在 WSGIPythonPath 上面提供的路径中:
~/.local/lib/python2.7/site-packages/django/core $ cat wsgi.py
import django
from django.core.handlers.wsgi import WSGIHandler
和
~/.local/lib/python2.7/site-packages $ ll
total 24
drwx------ 6 user user 4096 Mar 24 22:25 ./
drwx------ 3 user user 4096 Mar 20 20:56 ../
drwxrwxr-x 17 user user 4096 Mar 24 22:25 django/
drwxrwxr-x 2 user user 4096 Mar 24 22:25 Django-1.9.4.dist-info/
drwxrwxr-x 5 user user 4096 Mar 20 20:59 mod_wsgi/
drwxrwxr-x 2 user user 4096 Mar 20 20:59 mod_wsgi-4.4.22.egg-info/
我还尝试验证mod_wsgi模块构建的python版本:
/usr/lib/apache2/modules $ ldd mod_wsgi.so
linux-vdso.so.1 => (0x00007ffe50f31000)
libpython2.7.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 (0x00007f376fbc2000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f376f9a4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f376f5d9000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f376f3bf000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f376f1bb000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f376efb7000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f376ecaf000)
/lib64/ld-linux-x86-64.so.2 (0x00005609838b3000)
所以看起来它是针对Python 2.7的构建,它与正在安装Django的版本相同。
那为什么apache无法加载我的应用程序/ django?
答案 0 :(得分:2)
基于: http://www.webforefront.com/django/setupapachewebserverwsgi.html
www-data 用户(运行apache文件夹的用户)必须具有对包含django安装的文件夹的读取权限。我刚做了一个测试,我将django安装和我的Web应用程序复制到: / var / www / test 并更改了该文件夹的权限:sudo chgrp -R www-data /var/www/test
sudo chmod -R g+rwx /var/www/test
现在加载应用程序。
答案 1 :(得分:1)
当我根据本教程尝试设置我的Django,Nginx和WSGI时,我刚刚收到此错误:https://uwsgi.readthedocs.io/en/latest/tutorials/Django_and_nginx.html
当我输入命令时:uwsgi --http :8000 --module mysite.wsgi
我收到错误:
来自django.core.wsgi import get_wsgi_application ImportError:没有 名为django.core.wsgi的模块
对我来说没有任何意义,因为当我在virtualenv中输入python shell并导入模块时,它完美无缺。
但是,我发现本教程有助于消除错误:https://gist.github.com/evildmp/3094281
uwsgi --http :8000 --module project.wsgi --virtualenv /path/to/virtualenv
键入virtualenv的路径会导致WSGI找到它缺少的模块。
您可以在命令提示符/终端中输入$ECHO virtualenv
来找到virtualenv的路径。
答案 2 :(得分:0)
我有同样的问题。
原因是我通过apt安装了gunicorn,然后在系统范围内的Python 2安装中运行,而不是在venv中运行。
通过卸载系统gunicorn,然后激活我的venv,并使用pip install gunicorn将venicorn安装到venv来解决此问题。然后它立即起作用。