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

Mod_wsgi无法加载django.core.handlers.wsgi,django,apache2,ubuntu-12.04,mod-wsgi,Django,Apache2,Ubuntu 12.04,Mod Wsgi,好吧,经过5-6个小时的尝试,我放弃了。我搜索过网络,尝试过所有建议的解决方案,但没有任何东西能解决我的问题 目标:在我的Ubuntu 12.04 VPS上设置Django 问题:处理WSGI脚本时发生异常[…]导入错误:在/etc/log/apache2/error.log中没有名为django.core.handlers.WSGI的模块 尝试的解决方案:1)将site packages目录附加到Djangos的wsgi.py文件中的sys路径,2)重新安装mod_wsgi,3)确保mod_w

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

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

问题:
处理WSGI脚本时发生异常[…]导入错误:在/etc/log/apache2/error.log中没有名为django.core.handlers.WSGI的模块

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

环境:Ubuntu 12.04 VPS,在virtualenv中安装Django,Python版本2.7.3,Django版本1.6.1,mod_wsgi构建自

完整错误消息:

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>
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.

确保在Apache2配置文件中使用绝对路径。我假设您已经能够运行
python manage.py shell
来获得一个工作的Django shell?我将处理Apache2配置文件;我相信你的问题就在那里

~/Envs/myEnv/lib/python2.7/site-packages
我认为这就是你的问题所在:
~
如果它被扩展的话,就是扩展到www数据用户的家中。您可以通过执行以下操作来验证:

import sys
print >> sys.stderr, sys.path
在wsgi文件中;然后检查您的错误日志。如果没有出现在主错误日志中,请在vhost中添加一个
ErrorLog
,以获取每vhost错误日志


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

在您的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进程):



请参见

创建虚拟主机部分,您的Apache site.conf是什么?我没有对其进行任何编辑。不是
apache2.conf
,而是您的站点配置,例如
等。通常位于
/etc/apache2/sites available/.conf
如果您安装了多个python版本:您编译mod_wsgi的python版本是否与您的virtualenv的python版本匹配?@adityasdarma1:Oh ok。我已经更新了我原来的帖子。是的,我可以运行shell。但是我还没有触及apache2.conf文件。我在apache2/sites中添加了一个文件,该文件具有WSGI设置。我已经在httpd.conf中添加了这一行:
加载模块wsgi\u module/usr/lib/apache2/modules/mod\u wsgi.so
。准确地说,您指的是什么设置?对不起,我指的是要添加的站点可用站点的配置文件,而不是/etc/apache2/apache2.conf文件。我假设您已经安装了模块,
aptitude install libapache2 mod wsgi
,并验证mod_wsgi是否链接到/etc/apache2/mods_中,并启用了
apache2 en2mod wsgi
。如果你能在问题中包括你的站点可用配置文件,可能会有一些线索。哦,好的。我已经确认mod_wsgi已启用。我已经用apache2/sites-available中的配置文件更新了我的原始帖子。但是您可以运行
python manage.py shell
,然后从django.core.handlers导入wsgi
?如果是这样,我认为
WSGIDaemonProcess
行可能是问题所在。首先,我认为您需要更改
python路径=/var/www/mysite.com/djangoSite:…
python路径=/var/www/mysite.com/djangoSite/djangoSite:…
添加第二个djangoSite站点,第二个~/链接可能无法像其他人指出的那样工作,试着让它成为绝对(完整)路径;但我不确定这是你的问题,如果你尝试过其他的回应。您还可以添加wsgi.py文件吗?可能那里没有设置python路径。谢谢,但我将其更改为绝对路径,
/root
,而不是
~
,结果相同。您是否尝试从wsgi.py打印路径?是的,我现在打印了。它打印出似乎正确的路径,包括myenv/lib/python2.7/site-packages和/usr/local/lib/python2.7/site-packages。这是“myenv/lib/python2.7/site-packages”绝对路径吗?是的,从
/root
开始。这给了我
IOError:[Errno 13]拒绝权限:'/root/Envs/myenv/bin/activate\u this'
。我已经
chmod 777激活了\u this.py
,但仍然得到了那个错误。嗯,我没有
mkvirtualenv
指定项目目录。我可以把项目的路径附加到Python路径吗?我已经在我的原始帖子中添加了wsgi.py的当前内容。我仍然被拒绝许可:(尝试将虚拟环境置于/root/之外。python代码以
www-data
的形式执行。如果要读取文件,需要正确访问路径中的所有目录。
www-data
通常甚至没有
/root/
@trevorDashDash的读取权限。您可以在shell上模拟这一点:
sudo-u www-data bash
,则
cd/root/Envs/
应为您提供相同的权限错误
WSGIScriptAlias / /var/www/mysite.com/djangoSite/djangoSite/wsgi.py
Alias /static/ /var/www/mysite.com/djangoSite/static/