按照TUT-Apache+Django+mod_wsgi教学文件中在apache中部署一个django site已经OK,如何在Apache下部署多个django site呢
配置
- 注释或者删除原先配置行
#WSGIScriptAlias / /path/to/mysite/django.wsgi#<Directory/path/to/mysite># Order Deny,Allow# Allow from all#</Directory> - 去掉默认virtual host的include注释,如果默认没有virtual host,手动添加配置
Include conf/extra/httpd-vhosts.conf - 配置virtual host
NameVirtualHost *:80 #配置NameVirtualHost,用于VirtualHost指令<VirtualHost*:80>#配置特定IP或者任意IP下特定端口,此处"*:80"参数必须是前面配置好的NamedVirtualHostServerAdmin webmaster@dummy-host2.garmin.com.twDocumentRoot "C:/Documents and Settings/gis/My Documents/nuMapIndia/"ServerName numaps.garmin.com #注意此域名对应不同site,目前将该域名用于测试India回报系统。ServerName的域名一定要和DNS中配置的域名一致WSGIScriptAlias / "C:/Documents and Settings/gis/My Documents/nuMapIndia/nuMapIndia/wsgi.py"</VirtualHost><VirtualHost*:80>ServerAdmin webmaster@dummy-host2.garmin.com.twDocumentRoot "C:/Documents and Settings/gis/My Documents/mySite/"ServerName numaps.garmin.com.cnWSGIScriptAlias / "C:/Documents and Settings/gis/My Documents/mySite/wsgi.py" #WSGIScriptAlias配置还是原来一致</VirtualHost><VirtualHost*:80>ServerAdmin webmaster@dummy-host2.garmin.com.twDocumentRoot "C:/Documents and Settings/gis/My Documents/mySite/"ServerName numaps.garmin.com.twWSGIScriptAlias / "C:/Documents and Settings/gis/My Documents/mySite/wsgi.py"</VirtualHost>#配置目录权限<Directory"C:/Documents and Settings/gis/My Documents/nuMapIndia/">Order deny,allowAllow from all</Directory><Directory"C:/Documents and Settings/gis/My Documents/mySite/">Order deny,allowAllow from all</Directory>
错误
配置完成,启动apache,先访问第一个site没有问题,但是再访问第二个site时出现500错误
错误日志如下
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] mod_wsgi (pid=7592): Exception occurred processing WSGI script 'C:/Documents and Settings/gis/My Documents/mySite/wsgi.py'.
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] Traceback (most recent call last):
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] File "C:\\Python27\\lib\\site-packages\\django\\core\\handlers\\wsgi.py", line 236, in __call__
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] self.load_middleware()
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] File "C:\\Python27\\lib\\site-packages\\django\\core\\handlers\\base.py", line 51, in load_middleware
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] mod = import_module(mw_module)
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] File "C:\\Python27\\lib\\site-packages\\django\\utils\\importlib.py", line 35, in import_module
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] __import__(name)
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] File "C:\\Python27\\lib\\site-packages\\django\\contrib\\auth\\middleware.py", line 3, in <module>
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] from django.contrib.auth.backends import RemoteUserBackend
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] File "C:\\Python27\\lib\\site-packages\\django\\contrib\\auth\\backends.py", line 3, in <module>
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] from django.contrib.auth.models import Permission
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] File "C:\\Python27\\lib\\site-packages\\django\\contrib\\auth\\models.py", line 8, in <module>
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] from django.db import models
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] File "C:\\Python27\\lib\\site-packages\\django\\db\\__init__.py", line 40, in <module>
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] backend = load_backend(connection.settings_dict['ENGINE'])
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] File "C:\\Python27\\lib\\site-packages\\django\\db\\__init__.py", line 34, in __getattr__
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] return getattr(connections[DEFAULT_DB_ALIAS], item)
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] File "C:\\Python27\\lib\\site-packages\\django\\db\\utils.py", line 93, in __getitem__
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] backend = load_backend(db['ENGINE'])
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] File "C:\\Python27\\lib\\site-packages\\django\\db\\utils.py", line 27, in load_backend
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] return import_module('.base', backend_name)
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] File "C:\\Python27\\lib\\site-packages\\django\\utils\\importlib.py", line 35, in import_module
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] __import__(name)
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] File "C:\\Python27\\lib\\site-packages\\django\\db\\backends\\sqlserver_ado\\base.py", line 6, in <module>
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] import dbapi as Database
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] File "C:\\Python27\\lib\\site-packages\\django\\db\\backends\\sqlserver_ado\\dbapi.py", line 49, in <module>
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] import pythoncom
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] File "C:\\Python27\\lib\\site-packages\\pythoncom.py", line 2, in <module>
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] import pywintypes
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] File "C:\\Python27\\lib\\site-packages\\win32\\lib\\pywintypes.py", line 124, in <module>
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] __import_pywin32_system_module__("pywintypes", globals())
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] File "C:\\Python27\\lib\\site-packages\\win32\\lib\\pywintypes.py", line 114, in __import_pywin32_system_module__
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] assert sys.modules[modname] is old_mod
[Thu Apr 18 20:08:03 2013] [error] [client 10.127.9.123] AssertionError
|
解决方法
- @see Multiple django sites on Apache / Windows / mod_wsgi - problem with win32
- @see Running two Django Apps
根据网上的相同问题解决方式,找到pywintypes.py文件中如下line 114/115ifsys.version_info < (3,0):assertsys.modules[modname]isold_modassertmodisold_mod将其注释
ifsys.version_info < (3,0):#assert sys.modules[modname] is old_mod#assert mod is old_modpass两个站点访问正常,问题解决
其他
- 之前关于apache下同时运行两个django site共享环境变量的可能似乎没有问题
- 在本地运行两个django site测试发现一个奇怪的问题:site访问正常,但是当登陆第一个site后,再去登陆第二个site,登陆成功后点获取回报列表提示未登录,这时再点击一个site的回报列表也提示未登录
难道django session失效,共用session?共享内存数据了?重启机器后在本地测试没有出现这个问题。在192.168.200.241上测试完全就没有遇到这个问题。