Mod_wsgi无法加载django.core.handlers.wsgi

时间:2013-12-26 23:02:26

标签: django apache2 ubuntu-12.04 mod-wsgi

好的,经过5-6小时的尝试,我放弃了。我搜索了网络,尝试了所有建议的解决方案,但没有解决我的问题。

目标:在我的Ubuntu 12.04 VPS上设置Django。

/etc/log/apache2/error.log中的

问题: Exception occurred processing WSGI script [...] ImportError: No module named django.core.handlers.wsgi

尝试解决方案: 1)将site-packages目录附加到Djangos的wsgi.py文件中的sys路径,2)重新安装mod_wsgi,3)确保mod_wsgi被编译为相同的作为Django的Python版本安装了4)chmod 777用于site-packages目录。

环境: Ubuntu 12.04 VPS,Django安装在virtualenv,Python版本2.7.3,Django版本1.6.1,mod_wsgi从mod_wsgi-3.4.tar.gz构建。

完整错误消息:

mod_wsgi (pid=23691): Exception occurred processing WSGI script '/var/www/mySite/djangoSite/djangoSite/wsgi.py'.
Traceback (most recent call last):
   File "/var/www/mySite/djangoSite/djangoSite/wsgi.py", line 7, in <module>
     import django.core.handlers.wsgi
ImportError: No module named django.core.handlers.wsgi
mod_wsgi (pid=23691): Target WSGI script '/var/www/mySite/djangoSite/djangoSite/wsgi.py' cannot be loaded as Python module.

mod_wsgi (pid=23691): Exception occurred processing WSGI script '/var/www/mySite/djangoSite/djangoSite/wsgi.py'.
Traceback (most recent call last):
   File "/var/www/mySite/djangoSite/djangoSite/wsgi.py", line 7, in <module>
     import django.core.handlers.wsgi
ImportError: No module named django.core.handlers.wsgi

来自网站的配置文件:

<VirtualHost *:80>
    ServerAdmin admin@mysite.com
    ServerName mysite.com

    DocumentRoot /var/www/mysite.com/djangoSite

    WSGIDaemonProcess djangoSite python-path=/var/www/mysite.com/djangoSite:~/Envs/myEnv/lib/python2.7/site-packages
    WSGIProcessGroup djangoSite
    WSGIScriptAlias / /var/www/mysite.com/djangoSite/djangoSite/wsgi.py

    Alias /static/ /var/www/mysite.com/djangoSite/static/

    <Directory /var/www/mysite.com/djangoSite/static>
        Order deny,allow
        Allow from all
    </Directory>

    <Directory /var/www/mysite.com/djangoSite/djangoSite>
        <Files wsgi.py>
            Order deny,allow
            Allow from all
        </Files>
    </Directory>
</VirtualHost>

wsgi.py:

import os
import sys

sys.path.append('/var/www/mysite.com/djangoSite/')
sys.path.append('/var/www/mysite.com/djangoSite/djangoSite/')

activate_this = '/root/Envs/myenv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

os.environ['DJANGO_SETTINGS_MODULE'] = 'djangoSite.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

网站结构

/var/www/
-- mysite.com
  -- djangoSite
    -- manage.py
    -- djangoSite
      -- settings.py, wsgi.py etc.

3 个答案:

答案 0 :(得分:2)

在你的wsgi.py中,尝试添加它以激活虚拟环境:

import os
import sys

sys.path.append('/Path_To/Virtual_Env/Project_Dir/')

#This is important if multiple apps are running (instead of setdefault)
os.environ["DJANGO_SETTINGS_MODULE"] = "app_name.settings"

activate_this = '/Path_To/Virtual_Env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

在apache配置中,您只需要(无需Deamon Process):

WSGIScriptAlias / /var/www/mysite.com/djangoSite/djangoSite/wsgi.py
Alias /static/ /var/www/mysite.com/djangoSite/static/

请参阅this link

创建虚拟主机部分

答案 1 :(得分:0)

确保在Apache2配置文件中使用绝对路径。我假设你能够运行python manage.py shell来获得一个可用的Django shell吗?我会解决Apache2配置文件;我确定你的问题就在那里。

答案 2 :(得分:0)

~/Envs/myEnv/lib/python2.7/site-packages

我认为这就是你的问题:~如果完全展开,则会扩展到www-data用户的家中。您可以通过执行以下操作来验证:

import sys
print >> sys.stderr, sys.path

在你的wsgi文件中;然后检查你的错误日志。如果它未在主错误日志中结束,请向您的vhost添加ErrorLog以获取每个vhost错误日志记录。

此外,对于www-data用户,/ root /不可读,您需要将虚拟环境移动到可访问的位置。