使用 apache 运行 mod_wsgi 时出现问题

使用 apache 运行 mod_wsgi 时出现问题

之前实现此设置没有任何问题,在家里设置了一个新服务器并想开展一些 django 项目。

我使用 virtualenv 和 virtualenvwrapper,mod_wsgi 模块似乎安装正确。这是我使用的 vhost

<VirtualHost *:80>
        ServerName local.projectname.com
        ServerAlias local.projectname.co.uk

        WSGIDaemonProcess site-dev1 user=mike group=mike threads=20 python-path=/home/mike/envs/projectenv/lib/python2.6/site-packages
        WSGIProcessGroup site-dev1
        WSGIScriptAlias / /home/mike/Sites/path/project/django.wsgi

        <Directory /home/mike/Sites/path/project>
                Options +Indexes FollowSymLinks +ExecCGI
                AllowOverride AuthConfig FileInfo
                Order allow,deny
                Allow from all
        </Directory>

        # Allow cross domain @font-face styles for Firefox
        <FilesMatch "\.(ttf|otf|eot)$">
                <IfModule mod_headers.c>
                        Header set Access-Control-Allow-Origin "*"
                </IfModule>
        </FilesMatch>

        ErrorLog /var/log/apache2/error.log
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
</VirtualHost>

当我尝试导航到项目时,我收到 500 内部服务器错误,这是 apache 错误日志的输出

[Sun Jul 24 08:46:32 2011] [error] [client 127.0.0.1] Traceback (most recent call last):
[Sun Jul 24 08:46:32 2011] [error] [client 127.0.0.1]   File "/home/mike/Sites/outsideline/queenonline/queenonline.wsgi", line 16, in <module>
[Sun Jul 24 08:46:32 2011] [error] [client 127.0.0.1]     from django.core.handlers.wsgi import WSGIHandler
[Sun Jul 24 08:46:32 2011] [error] [client 127.0.0.1] ImportError: No module named django.core.handlers.wsgi

我可以从 django.core.handlers.wsgi 导入 WSGIHandler,没有任何错误,据我了解,WSGIdaemon 的进程和组应该是文件的用户和组所有者,我还将我的 apache 用户和组设置为以 mike:mike 身份运行,看看是否可行

我现在完全没有主意了,所以如果有人能对此有所启发,我将永远感激不尽!

答案1

检查 PYTHONPATH

要调试此问题,您可以使用记录器(Python 记录器)将 .wsgi 脚本的日志输出到文件中。可以使用 sys.path 在 Python 内部读取 PYTHONPATH

  import sys
  log = open("/tmp/log.txt", "wt") # ghetto logging
  print >> log, sys.path # you'll see what you have PYTHONPATH when running the script

然后你可以检查 Python 是否真的可以打开文件

  import sys
  log = open("/tmp/log.txt", "wt") # ghetto logging
  try:
      f = open("/path/to/django/__init__.py", "rt")
  exception Exception, e:
      print >> log, str(e)

相关内容