Django + mod_wsgi:有人可以告诉我我的设置和重写规则

时间:2012-10-09 23:59:10

标签: django apache apache2 mod-wsgi linode

这是我第一次将Django部署到最近收购的Linode服务器上,我很好奇是否有人可以查看我的部署并帮助我解决一些棘手的问题并告诉我我是否做错了。

目录结构

home\
    -public\
        -example.com\
            -public\
                -.htaccess
                -index.html
            -log\
            -application\
                -mysite\
                    -mysite\
                    -manage.py
                    -static\
                    -myapp\
                    -logs\

这对Django的部署结构有何影响?

URL命名不正确

我在我的域'example.com'上托管了名为'myapp'的Django应用程序。按照Django网站上的说明,我已经做到这一点,以便应用程序的urls.py必须以'/ myapp'开头。这导致应用程序的域名变为“example.com/myapp”。

如何设置它以便example.com只是我编写的Django应用程序? 我只想导航到example.com,它加载我的应用程序而不是example.com/myapp。

甚至更奇怪的是,我会认为example.com会加载我的index.html文件,但是它试图找到Django的URL映射...

Django日志文件写入权限

每当我在我的机器上SSH到“syncdb”或“collectstatic”时,日志记录模块都会创建我在settings.py文件中命名的日志文件。这会给我带来麻烦,因为我是文件的所有者,而apache2(www-data)无法写入。在重新启动Apache服务器之前,必须在每个命令之后手动删除日志文件,这很烦人。

这是我的/etc/apache2/sites-available/example.com文件:

# domain: example.com
# public: /home/setheron/public/example.com/

WSGIPythonPath /home/setheron/public/example.com/applications/mysite:/home/setheron/env/lib/python2.7/site-packages

<VirtualHost *:80>
  # Admin email, Server Name (domain name), and any aliases
  ServerAdmin setheron@setheron.com
  ServerName  www.example.example.com
  ServerAlias example.com

  WSGIScriptAlias / /home/setheron/public/example.com/applications/mysite/mysite/wsgi.py

  Alias /static/ /home/setheron/public/example.com/applications/mysite/static/
  <Directory /home/setheron/public/example.com/applications/mysite/static/>
        Order deny,allow
        Allow from all
  </Directory>

  <Directory /home/setheron/public/example.com/applications/mysite/mysite>
  <Files wsgi.py>
        Order deny,allow
        Allow from all
  </Files>
  </Directory>

  # Index file and Document Root (where the public files are located)
  DirectoryIndex index.html index.php
  DocumentRoot /home/setheron/public/example.com/public

  # Log file locations
  LogLevel warn
  ErrorLog  /home/setheron/public/example.com/log/error.log
  CustomLog /home/setheron/public/example.com/log/access.log combined
</VirtualHost>

1 个答案:

答案 0 :(得分:1)

如果您希望Django服务整个网站,请删除您的公共目录,索引等等。除了/ static之外,您应该只需要WSGIScriptAlias指令。修复urls.py以表明您的网站应该来自/,而不是/ myapp。