【问题标题】:Problem setting up django on Apache在 Apache 上设置 django 的问题
【发布时间】:2010-08-15 19:24:44
【问题描述】:

这可能真的很简单。但我想我对 WSGI 和 Django 太陌生了,无法自己获得它。我在 /var/www/mysite 中托管的 Ubuntu 虚拟机上有一个全新的闪亮 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 中没有错误。

有人有什么想法吗?

【问题讨论】:

  • 为什么叫wsdl?不应该是 .wsgi 吗?并不是说它可能很重要..
  • 对不起,这是帖子上的错字。更正为 wsgi(在文件中)

标签: django apache2 mod-wsgi


【解决方案1】:

原始问题的明显错误是:

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 错误日志中也必须有一个错误,因此您要么在错误的地方寻找,要么不知道要寻找什么。

【讨论】:

  • 当我将 wsgi 文件移动到项目根目录并添加路径时,一切正常。
  • 在项目根目录中包含 WSGI 文件是个坏主意,因为这意味着您在技术上需要允许 Apache 能够从您的项目目录向远程用户提供任何文件,包括您的设置文件,包括数据库密码。现在,您可能没有在 Apache 中映射任何 URL,这意味着项目目录中的文件实际上可以作为静态文件下载,但您仍然删除了一个底层安全级别。所以,回到使用 'apache' 子目录,只有 'Allow from all' 用于包含 WSGI 脚本文件的那个 'apache' 子目录。
  • 有关“apache”子目录的更多信息,请参阅“code.google.com/p/modwsgi/wiki/IntegrationWithDjango”。
【解决方案2】:

您是不是缺少 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()

【讨论】:

  • 好吧,看起来你的 app.wsgi 文件在项目文件夹中,而不是在 apache 子文件夹中,所以我把我的移到那里并相应地更改了 apache 配置。哈。我知道了!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 2023-03-03
  • 2012-06-09
  • 2011-03-04
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
相关资源
最近更新 更多