Django 错误500和其他网站';内容

Django 错误500和其他网站';内容,django,apache,mod-wsgi,Django,Apache,Mod Wsgi,我有一些小的django项目与apache和mod_wsgi在同一台服务器上工作。我使用virtualenvironment安装了另一个one项目,并在Apache conf文件中为其设置: <VirtualHost XXX.XXX.XXX.XXX:81 > ServerName mywebsite.com CustomLog /var/www/httpd-logs/mywebsite.com.access.log combined DocumentRoot

我有一些小的django项目与apache和mod_wsgi在同一台服务器上工作。我使用virtualenvironment安装了另一个one项目,并在Apache conf文件中为其设置:

<VirtualHost XXX.XXX.XXX.XXX:81 >
    ServerName mywebsite.com
    CustomLog /var/www/httpd-logs/mywebsite.com.access.log combined
    DocumentRoot /var/www/empirik/data/www/mywebsite.com
    ErrorLog /var/www/httpd-logs/mywebsite.com.error.log
    ServerAlias www.mywebsite.com
    SuexecUserGroup empirik empirik

    WSGIScriptAlias / /var/www/empirik/data/www/mywebsite.com/myproject/wsgi.py
    WSGIDaemonProcess mywebsite.com python-path=/var/www/empirik/data/www/mywebsite.com/env/lib/python2.7/site-packages

    <Directory /var/www/empirik/data/www/mywebsite.com/myproject>
        Order deny,allow
        Allow from All
    </Directory>

    <Directory /var/www/empirik/data/www/mywebsite.com/myproject/static>
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

另一个问题是为什么它仍然使用默认的系统python,而不是来自virtualenv?请帮忙

您不能在同一apache下使用不同的python可执行文件,因为为所有虚拟主机全局设置了
WSGIPythonHome
(请参阅)。如果未设置
WSGIPythonHome
,则mod_wsgi将使用系统python

您似乎没有正确设置
wsgi.py
。在
wsgi.py
中,您的目标是正确操作sys.path,以便项目所需的一切都可用。当我遇到同样的问题时,以下是帮助我的方法:


希望有帮助

缺少您的配置:

WSGIProcessGroup mywebsite.com
否则,您的WSGI应用程序甚至不会被委托给守护进程进程组。您可以通过以下方式进行检查:

一旦正确使用了守护进程模式,只要使用mod_wsgi 3.4,就可以使用以下命令为特定的守护进程进程组设置Python主页:

WSGIDaemonProcess mywebsite.com python-home=/var/www/empirik/data/www/mywebsite.com/env
通过这种方式,您可以简单地指向Python虚拟环境的根,它将被拾取

不过,您仍然需要将python路径选项指定给Django项目的父目录,以便可以找到它和设置模块,这就是您遇到的问题。因此,您可能希望:

WSGIDaemonProcess mywebsite.com \
    python-home=/var/www/empirik/data/www/mywebsite.com/env \
    python-path=/var/www/empirik/data/www/mywebsite.com
现在,如果在守护进程组中仅运行该站点,请设置:

WSGIApplicationGroup %{GLOBAL}
避免C扩展模块在子解释器中无法工作的问题

为了更安全,而不是:

<Directory /var/www/empirik/data/www/mywebsite.com/myproject>
    Order deny,allow
    Allow from All
</Directory>
如果您没有静态媒体目录的别名,Apache将不会在那里提供文件

最后,由于要强制使用守护程序模式并避免使用嵌入式模式,请设置:

WSGIRestrictedEmbedded On

这样,如果您错误地将配置搞砸,并且像当前一样错误地在嵌入式模式下运行,您将得到一个错误。

谢谢,特别是关于WSGIPythonHome的信息。我不知道这件事。我做了一些更改,现在看起来一切正常,尽管我仍然不知道是什么导致了我的问题,因为wsgi文件中的路径似乎是正确的。
<Directory /var/www/empirik/data/www/mywebsite.com/myproject>
<Files wsgi.py>
    Order deny,allow
    Allow from All
</Files>
</Directory>
<Directory /var/www/empirik/data/www/mywebsite.com/myproject/static>
    Order deny,allow
    Allow from all
</Directory>
Alias /media /var/www/empirik/data/www/mywebsite.com/myproject/static
WSGIRestrictedEmbedded On