如何在单个Apache服务上设置多个Django版本?

1 投票
2 回答
1198 浏览
提问于 2025-04-17 03:27

我在用Windows XP,想知道怎么在一个Apache服务上通过虚拟主机创建多个Django版本。

我还想用一个Python实例来实现这个。请问我需要为每个Django版本创建一个Python实例吗?还是说Django只需要它的“蛋”(这里指的是Django的安装包),所以我可以在一个Python版本里放多个“蛋”?

2 个回答

2

你可以在你的 httpd.conf 文件里做一些这样的设置:

NameVirtualHost 0.0.0.0:80
<VirtualHost 0.0.0.0:80>
    ServerName myserver.com
    ServerAdmin myemail@gmail.com
    DocumentRoot "/path/to/html/root"
    ErrorLog "/path/to/apache-error.log"
    CustomLog "/path/to/apache-access.log" common

    Options ExecCGI FollowSymLinks MultiViews

    AddHandler wsgi-script .wsgi
    WSGIDaemonProcess djangoapp1
    WSGIProcessGroup djangoapp1
    WSGIScriptAlias / /path/to/djangoapp1.wsgi

    Alias /static /path/to/static/files

    DirectoryIndex index.html index.cgi

    AddHandler cgi-script .cgi .pl
</VirtualHost>

NameVirtualHost 0.0.0.0:81
<VirtualHost 0.0.0.0:81>
    ServerName myserver.com
    ServerAdmin myemail@gmail.com
    DocumentRoot "/path/to/html/root"
    ErrorLog "/path/to/apache-error.log"
    CustomLog "/path/to/apache-access.log" common

    Options ExecCGI FollowSymLinks MultiViews

    AddHandler wsgi-script .wsgi
    WSGIDaemonProcess djangoapp2
    WSGIProcessGroup djangoapp2
    WSGIScriptAlias / /path/to/djangoapp2.wsgi

    Alias /static /path/to/static/files

    DirectoryIndex index.html index.cgi

    AddHandler cgi-script .cgi .pl
</VirtualHost>

然后,在你的 djangoapp1.wsgi 或 djangoapp2.wsgi 脚本里,你可以定义不同的 Django 版本和应用:

#!/usr/bin/python
import os
import sys
sys.path.append('')
sys.path.append('/path/to/python2.7/site-packages')
sys.path.append('/path/to/python2.7/dist-packages/Django-1.3-py2.7.egg ')
... etc ...
sys.path.append('/path/to/djangoapp1/src')
os.environ['DJANGO_SETTINGS_MODULE'] = 'djangoapp1.settings'
os.environ['PYTHON_EGG_CACHE'] = '/tmp'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
1

方法一:

把 Django 的源代码放到你想要的任何地方,然后在你的 manage.pywsgi.py 文件中手动指定 Django 源代码的路径:

import os
os.path.insert(0, 'path-to-django-source');

你也可以使用 virtualenv。这个工具会自动为控制台应用修正路径,不过在 wsgi.py 中你还是需要手动写路径。

方法二:

使用 zc.buildoutdjangorecipe,它会为你处理所有事情,包括:

  • 下载 Django
  • 下载其他模块
  • project-dir\bin\wsgi 创建 wsgi.py 文件
  • project-dir\bin\django.exe 创建 manage.py 文件

这一切都只需要一个配置文件 buildout.cfg,在这里你列出你的模块和其他设置,然后运行一个命令:buildout -N

不过,如果你时间紧迫,buildout 可能不是一个好的选择,因为你需要学习一些东西。但如果你打算做更多的 Python 应用,我绝对推荐你试试它。

这里有一些关于 Django+buildout 设置的例子:

http://www.google.lt/search?q=django+buildout+template+OR+skeleton

对你评论的更新

你不能在系统中同时安装两个 Django 版本。

不过你可以选择:

  1. 不安装 Django,只需把 django-base/django 文件夹放到你的项目路径中。如果你使用国际化(i18n),你需要手动编译国际化文件:

     cd django\conf
     python ..\..\manage.py compilemessages
    
  2. 或者,使用 python setup.py install 安装 Django,但要使用额外的参数来改变安装位置。Python 文档中 介绍了几种不同的方法

撰写回答