我们正在尝试在同一个Apache服务器上运行多个django实例。所有站点共享相同的代码(和设置文件),但具有不同的工作目录(使用wsgi.py和带有数据库参数的配置文件)和不同的数据库。 Django的版本是1.6.2。布局如下:
/bin/manage.py
/tttb/settings.py
/site1/wsgi.py
/config.txt
/site2/wsgi.py
/config.txt
以下是httpd.conf的当前格式。
NameVirtualHost *:80
WSGIPythonPath "Z:/projects/bin/tttb"
# site1
# =======================================
<VirtualHost *:80>
ServerName site1
WSGIScriptAlias "/djangosite1" "Z:/projects/site1/wsgi.py"
<Directory "Z:/projects/site1">
Order allow,deny
Allow from all
AllowOverride None
Options None
Require all granted
</Directory>
</VirtualHost>
# site1
# =======================================
<VirtualHost *:80>
ServerName site2
WSGIScriptAlias "/djangosite2" "Z:/projects/site2/wsgi.py"
<Directory "Z:/projects/site2">
Order allow,deny
Allow from all
AllowOverride None
Options None
Require all granted
</Directory>
</VirtualHost>
我们的wsgi.py文件如下所示:
import os,sys
bindir = os.path.join("Z:\\","projects","bin")
if bindir not in sys.path:
sys.path.append(bindir)
os.chdir(os.path.dirname(os.path.abspath(__file__)))
os.environ['DJANGO_SETTINGS_MODULE'] = 'tttb.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
与StackOverflow上的类似问题(请参阅here或here)相反,我们在Windows(XAMMP)上运行,因此无法使用WSGIApplicationGroup或WSGIProcessGroup。但是,乍一看这个设置有效。我们甚至在有和没有虚拟主机的情况下对它进行了测试。在这两种情况下它都可以。
除了一个细节:当我们需要确定当前工作目录(“。”)时,实例会混淆。例如。 myfile = open(os.path.join(“。”,“someresultfile.txt”),“r”) 最初, - 在重新启动Apache之后 - ,workdir仍然正确确定,但在浏览了两个站点之后,工作目录似乎被锁定在两个路径中的一个。 可能还有其他类似的泄漏我们都不知道,但这是最明显的。我们也在不使用虚拟主机的情况下尝试了这一点,它也给出了相同的结果。
另一个奇怪的行为是,当使用上面的虚拟主机时,网址http://www.domain.com/djangosite1(在一般主机名上)仍指向其中一个djangosites。但是,我希望它应该指向子目录htdocs / djangosite1(并且失败,因为该目录不存在)。
对此有任何帮助表示赞赏。