我正在编写一个 django 站点供我的组织内部使用。我正在使用测试驱动的方法来开发本教程中介绍的站点,因为我认为这是一种很好的做法。我正在使用 Ubuntu 12.04,以及来自存储库的 apache 服务器和 mod_wsgi。我的开发是在使用 virtualenvwrapper 创建的 virtualenv 中进行的。
我想在尽可能接近生产服务器的条件下测试站点,因此我尝试使用 mod_wsgi 在我的笔记本电脑上配置本地 apache 服务器,这是我以前从未做过的。我已经阅读了mod_wsgi和django 文档的相关部分并观看了这个视频,它解决了我在文件权限方面遇到的问题。但我似乎陷入了演示文稿没有解决的最后一个障碍——我想是因为我使用的是 django 1.4,它与早期版本有关,但我不确定。我致力于使用本地 apache 服务器而不是 django 开发服务器,因为该站点需要搜索,我想通过 haystack 和 apache solr 进行搜索,并且我想在部署之前对其进行测试并解决任何问题。
我的 wsgi.py 文件只是 django 的一个。修剪文档字符串后,它看起来像这样:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fugit.settings")
# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
# Apply WSGI middleware here.
# from helloworld.wsgi import HelloWorldApplication
# application = HelloWorldApplication(application)
我的 httpd.conf 看起来像这样:
WSGIScriptAlias / /var/www/djcode/fugit/fugit/fugit/apache/wsgi.py
WSGIPythonPath /var/www/djcode/fugit/fugit/fugit:/home/garry/.virtualenvs/fugit/lib/python2.7/site-packages
<Directory /var/www/djcode/fugit/fugit/fugit>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
当我访问 localhost 时,出现以下错误。它看起来像一个 PYTHONPATH 问题,但我对 django 文档的理解是上面 httpd.conf 中的第二行应该已经解决了这个问题。
[Fri Dec 28 10:22:03 2012] [warn] mod_wsgi: Compiled for Python/2.7.2+.
[Fri Dec 28 10:22:03 2012] [warn] mod_wsgi: Runtime using Python/2.7.3.
[Fri Dec 28 10:22:03 2012] [notice] Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured -- resuming normal operations
[Fri Dec 28 10:22:05 2012] [error] [client 127.0.0.1] mod_wsgi (pid=3280): Target WSGI script '/var/www/djcode/fugit/fugit/fugit/apache/wsgi.py' cannot be loaded as Python module.
[Fri Dec 28 10:22:05 2012] [error] [client 127.0.0.1] mod_wsgi (pid=3280): Exception occurred processing WSGI script '/var/www/djcode/fugit/fugit/fugit/apache/wsgi.py'.
[Fri Dec 28 10:22:05 2012] [error] [client 127.0.0.1] Traceback (most recent call last):
[Fri Dec 28 10:22:05 2012] [error] [client 127.0.0.1] File "/var/www/djcode/fugit/fugit/fugit/apache/wsgi.py", line 23, in <module>
[Fri Dec 28 10:22:05 2012] [error] [client 127.0.0.1] from django.core.wsgi import get_wsgi_application
[Fri Dec 28 10:22:05 2012] [error] [client 127.0.0.1] ImportError: No module named django.core.wsgi
[Fri Dec 28 10:22:08 2012] [error] [client 127.0.0.1] mod_wsgi (pid=3279): Target WSGI script '/var/www/djcode/fugit/fugit/fugit/apache/wsgi.py' cannot be loaded as Python module.
[Fri Dec 28 10:22:08 2012] [error] [client 127.0.0.1] mod_wsgi (pid=3279): Exception occurred processing WSGI script '/var/www/djcode/fugit/fugit/fugit/apache/wsgi.py'.
[Fri Dec 28 10:22:08 2012] [error] [client 127.0.0.1] Traceback (most recent call last):
[Fri Dec 28 10:22:08 2012] [error] [client 127.0.0.1] File "/var/www/djcode/fugit/fugit/fugit/apache/wsgi.py", line 23, in <module>
[Fri Dec 28 10:22:08 2012] [error] [client 127.0.0.1] from django.core.wsgi import get_wsgi_application
[Fri Dec 28 10:22:08 2012] [error] [client 127.0.0.1] ImportError: No module named django.core.wsgi
谁能告诉我我在这里缺少什么?
编辑:
看起来我可能有 virtualenvwrapper 权限问题。我已尝试按照此答案的建议移动我的 virtualenvs,但现在 virtualenvwrapper 似乎无法找到自己。我在尝试加载初始化挂钩时收到“[Errno 13] Permission denied”。我已经 chmod 755 新目录但没有骰子。
进一步编辑:我通过使用 nginx 作为 gunicorn 的反向代理而不是使用 Apache 部署来回避这个问题。大约半小时就设置好并顺利运行。