Django,可以同时运行两个不同版本吗?
我有一台服务器,上面有两个用Django和Python搭建的网站,一个是用旧版本的Django建的,另一个是用新版本的。最近我把新版本升级了,但旧网站的很多功能都坏掉了。请问有没有办法让这个网站使用不同的版本,比如在Python的路径里?或者在虚拟主机的设置里?
我非常需要帮助!
再补充一点信息,这台服务器是Linux系统,用户使用的是mod_python。以下是我在虚拟主机设置中尝试的内容:
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE website.settings
SetEnv PYTHON_EGG_CACHE /var/cache/pyeggcache
SetEnv PYTHONPATH "sys.path + ['usr/lib/python2.6/site-packages/django2']"
PythonDebug On
PythonPath "['/var/www/website_live/src'] + ['/var/www/webiste_live/src/website'] + sys.path"
</Location>
我把网站的名字换成了'website',我单独的Django版本放在/usr/lib/python2.6/site-packages/django2这个路径下。
5 个回答
当然可以,但需要稍微调整一下。这主要取决于你使用的服务器。
关键在于 $PYTHONPATH 这个变量。它存储了 Python 查找模块的位置,也就是 Python 会去哪里找你需要用的代码。如果你使用
import django.conf
它会在 $PYTHONPATH 中的所有目录里查找,并寻找一个叫做 django
的文件夹。
所以,关键是根据请求的去向来调整 $PYTHONPATH。如果你使用 mod_python 和 Apache,可能会像这样:
<VirtualHost *:80>
DocumentRoot "/var/htdocs/old_django_project"
ServerName old-django
PythonPath "sys.path + ['/var/software/old_django']"
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/htdocs/new_django_project"
ServerName new-django
PythonPath "sys.path + ['/var/software/new_django']"
</VirtualHost>
然后,访问 http://old-django/
就会带你到旧的 Django 实例,而访问新的 Django 也一样。
是的,你可以这样做。我在我的博客上详细讲过这个内容,可以在这里查看。
当你在一个服务器上有多个网站时,建议你使用像 virtualenv 这样的工具。
使用这个工具,你可以创建不同的虚拟环境,把每个网站需要的特定软件包放在里面,这样就不会搞乱你的网站软件包文件夹了。这也让开发变得更简单,因为你可以在本地轻松设置这些环境,并使用你需要的特定版本。
如果你还使用其他应用,这个工具会非常方便。Pinax 就是非常依赖这个工具的。处理软件包和版本的最简单方法就是创建一个需求文件。