如何在单个Apache服务上设置多个Django版本?
我在用Windows XP,想知道怎么在一个Apache服务上通过虚拟主机创建多个Django版本。
我还想用一个Python实例来实现这个。请问我需要为每个Django版本创建一个Python实例吗?还是说Django只需要它的“蛋”(这里指的是Django的安装包),所以我可以在一个Python版本里放多个“蛋”?
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()
方法一:
把 Django 的源代码放到你想要的任何地方,然后在你的 manage.py
和 wsgi.py
文件中手动指定 Django 源代码的路径:
import os
os.path.insert(0, 'path-to-django-source');
你也可以使用 virtualenv。这个工具会自动为控制台应用修正路径,不过在 wsgi.py
中你还是需要手动写路径。
方法二:
使用 zc.buildout 和 djangorecipe,它会为你处理所有事情,包括:
- 下载 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 版本。
不过你可以选择:
不安装 Django,只需把
django-base/django
文件夹放到你的项目路径中。如果你使用国际化(i18n),你需要手动编译国际化文件:cd django\conf python ..\..\manage.py compilemessages
或者,使用
python setup.py install
安装 Django,但要使用额外的参数来改变安装位置。Python 文档中 介绍了几种不同的方法。