2010-08-15 62 views
4

这可能很简单。但我想我对WSGI和Django来说太陌生了。我在/ var/www/mysite托管的Ubuntu虚拟机上有一个全新的闪亮Django项目。该项目是与在Apache上设置django的问题

django-admin startproject mysite 

我下面一个WSGI教程得到它成立创建的,所以我创建了一个./apache文件夹,这里面我把这个文件,django.wsgi:

import os 
import sys 
os.environ['DJANGO_SETTINGS_MODULE'] = '/var/www/mysite/mysite.settings' 

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

我加入这个配置行到Apache配置:

WSGIScriptAlias//var/www/mysite/apache/django.wsgi 

当我尝试打现场,什么都不会返回。连接只是挂起。这是在我access.log:

192.168.2.116 - - [15/Aug/2010:14:09:02 -500] "GET/HTTP/1.1" 500 639 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 

因此,它击中的网站。但有人没有做任何事情。 errors.log中没有错误。

任何人有任何想法?

+0

为什么命名为wsdl?它不应该是.wsgi吗?不是说这可能很重要.. – 2010-08-15 19:26:30

+0

对不起,这是一个错误的帖子。更正为wsgi(它在文件中) – Amy 2010-08-15 19:42:16

回答

2

在原来的问题中明显的错误是:

os.environ['DJANGO_SETTINGS_MODULE'] = '/var/www/mysite/mysite.settings' 

将需要:

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

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

也就是说,Django的设置模块必须是一个Python包路径,而不是绝对的文件系统路径。被接受的答案甚至没有指出这一点,而只是给出了另一套代码,没有解释。

此外,您需要设置Python模块搜索路径,即sys.path,以便Python可以找到您在该环境变量中列出的设置文件。

最后,如果您的浏览器挂起,您也做了其他错误,因为您所做的应该导致错误被返回,而不是浏览器挂起。在Apache错误日志中也必须存在错误,因此您要么查找错误的地方,要么不知道要查找什么。

+0

当我将wsgi文件移动到项目根目录并添加了路径时,它一切正常。 – Amy 2010-08-16 03:35:16

+0

将WSGI文件放入项目根目录是一个坏主意,因为这意味着您在技术上需要允许Apache从项目目录中为远程用户提供任何文件,包括您的设置文件(包括数据库密码)。现在,您可能没有在Apache中映射任何URL,这意味着项目目录中的文件实际上可以作为静态文件下载,但您仍然删除了一个基础级别的安全性。所以,回到使用'apache'子目录,并且只有包含WSGI脚本文件的'apache'子目录具有'允许所有'。 – 2010-08-16 05:29:49

+0

有关'apache'子目录的更多信息,请参阅'http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango'。 – 2010-08-16 05:30:54

1

您是不是缺少Django应用程序的路径?我app.wsgi有这样的:

import os, sys 
sys.path.append('/usr/local/src/django-1.2') # django is outside default path 
sys.path.append('/usr/local/src/django-photologue-2.2') # app i'm using 
sys.path.append('/var/www/mysite') 

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 
# this is regular python import, so my settings are physically 
# here: /var/www/mysite/settings.py 

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

好吧,它看起来像你有你的app.wsgi文件在项目文件夹内,而不是在apache子文件夹,所以我搬到那里,并相应地改变了Apache配置。哈。我知道了!非常感谢。 – Amy 2010-08-15 20:07:30