我想在同一主机中部署两个不同的django应用程序:第一个将对应于url / site1,第二个对应于url / site2。这是我的配置:
LoadModule wsgi_module modules/mod_wsgi.so WSGIScriptAlias /site1 /var/www/py/site1/site1/wsgi.py WSGIScriptAlias /site2 /var/www/py/site2/site2/wsgi.py WSGIPythonPath /var/www/py/site1:/var/www/py/site2 <Directory "/var/www/py/site1/site1"> <Files wsgi.py> Order deny,allow Allow from all </Files> </Directory> <Directory "/var/www/py/site2/site2"> <Files wsgi.py> Order deny,allow Allow from all </Files> </Directory>
此处还有两个应用程序的wsgi.py文件
import os import sys path = '/var/www/py/site1' if path not in sys.path: sys.path.append(path) os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site1.settings") from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
现在,这是我的问题。当我去我的服务器时,让我们说http://app1.sites.gr/site1它有时会加载site1,有时它会加载site2 !!!!当我访问http://app1.sites.gr/site2时也是如此......有些我获得了site1的欢迎页面,有时我得到了site2的欢迎页面!我正在点击F5并获得不同的欢迎页面。我已经检查了前几个小时的所有内容,并没有发现任何奇怪的事情......
请在疯狂之前告诉我可能出现什么问题...
谢谢!
答案 0 :(得分:46)
这是Django 1.4生成的wsgi.py文件的问题。在尝试在同一进程中托管两个不同的Django实例时,它将无法工作,即使在单独的子解释器中也是如此。
变化:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site1.settings")
为:
os.environ["DJANGO_SETTINGS_MODULE"] = "site1.settings"
或者更好的是仍然使用守护进程模式并委托每个守护进程模式在不同的守护进程组中运行。
即代替:
WSGIScriptAlias /site1 /var/www/py/site1/site1/wsgi.py
WSGIScriptAlias /site2 /var/www/py/site2/site2/wsgi.py
WSGIPythonPath /var/www/py/site1:/var/www/py/site2
使用:
WSGIDaemonProcess site1 python-path=/var/www/py/site1
WSGIScriptAlias /site1 /var/www/py/site1/site1/wsgi.py process-group=site1 application-group=%{GLOBAL}
WSGIDaemonProcess site2 python-path=/var/www/py/site2
WSGIScriptAlias /site2 /var/www/py/site1/site2/wsgi.py process-group=site2 application-group=%{GLOBAL}
更新
请注意,现在有一篇关于这个和其他原因的博客文章。
答案 1 :(得分:2)
你的应用程序在同一个端口上侦听,并且似乎没有代理将它们委托给不同的端口。
您必须在apache中设置VirtualHosts或使用Nginx,lighttpd或其他内容来创建正确的代理
答案 2 :(得分:1)