Django WSGI Apache VirtualHost,返回404错误

Zam*_*tta 6 python apache django ubuntu

  • Ubuntu 12.04
  • Apache 2.2.2
  • Python 3.2.3
  • Django 1.6.1

我按照使用mod_wsgi在Ubuntu 12.04上应用程序提供服务的指示,为Apache上的Django设置WSGI.问题是,VirtualHost域现在返回一个令人困惑的奇怪的404错误:

[Mon Dec 16 19:53:49 2013] [error] [client 127.0.0.1] File does not exist: /etc/apache2/htdocs
Run Code Online (Sandbox Code Playgroud)

这令人困惑,因为...该目录甚至不存在.VirtualHost在/ var/www/main中设置,其中/ var/apache2/sites-available/default中的配置如下所示:

<VirtualHost *:80>
        ServerName 127.0.0.1
        ServerAlias coral
        WSGIScriptAlias / /home/dfy/code/djdev/djdev/wsgi.py
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

我在编辑后重新加载了Apache.当我启动项目时,那个wsgi文件是Django生成的文件.我根据教程修改了它以匹配所需的内容:

import os
import sys # added from tutorial
sys.path.append('/home/dfy/code/djdev/djdev/') # added from tutorial
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djdev.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)

对我来说,这一切看起来应该可行,但Apache正在查找不存在的目录中的静态文件(/ etc/apache2/htdocs).我一直在谷歌搜索几个小时试图弄清楚这里有什么问题,但还没有找到答案.我一时兴起chmod 777 wsgi.py,但没有改变任何东西,所以我确定这不是权限问题.我真的不知道出了什么问题.

Bur*_*lid 4

但 Apache 正在不存在的目录中寻找静态文件

我不确定这里发生了什么,但我怀疑您的主要配置不正确。如果您不提供DOCUMENT_ROOT,Apache 将在默认位置(即 )中查找它htdocs

根据django 部署文档,您需要为虚拟主机提供以下配置。您可以更改适用于您的设置的路径:

Alias /robots.txt /path/to/mysite.com/static/robots.txt

Alias /favicon.ico /path/to/mysite.com/static/favicon.ico

AliasMatch ^/([^/]*\.css) /path/to/mysite.com/static/styles/$1

Alias /media/ /path/to/mysite.com/media/
Alias /static/ /path/to/mysite.com/static/

<Directory /path/to/mysite.com/static>
    Order deny,allow
    Allow from all
</Directory>

<Directory /path/to/mysite.com/media>
    Order deny,allow
    Allow from all
</Directory>

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath /path/to/mysite.com

<Directory /path/to/mysite.com/mysite>
    <Files wsgi.py>
        Order deny,allow
        Require all granted
    </Files>
</Directory>
Run Code Online (Sandbox Code Playgroud)

请使用官方文档,该文档随着特定 django 版本的更改而更新。