J'ai deux sites django qui utilisent la même base de données et partagent une partie du code. Le site parent principal est un extranet pour le personnel et les sous-traitants, tandis que le second site expose certaines de ces données à quelques-uns de nos partenaires. J'ai réussi à configurer des sites pour travailler mais j'ai trouvé que si je lançais Apache et que je me rendais sur le site principal, le site partenaire ne fonctionnerait pas, renvoyant une "Erreur interne du serveur". Si je redémarrais et passais sur le site partenaire, le site principal ne fonctionnerait pas. Donc, je suppose qu'ils sont en conflit sur les ressources. Le journal du serveur (voir en bas) montre qu'il s'agit d'un problème avec le module win32/lib/pywintypes.py, ligne 114. Ailleurs, il a été suggéré de commenter ces lignes (voir ci-dessous). Donc j'ai essayé ça et ça marche.Plusieurs sites django sur Apache/Windows/mod_wsgi - problème avec win32
Je ne comprends pas vraiment ce qui se passe dans le code et si le fait de le commenter va juste me causer des problèmes plus tard. Donc, la question est:
Y a-t-il autre chose qui pourrait causer cela? Ce fudge est-il 'sûr' à faire?
# py2k and py3k differences:
# On py2k, after doing "imp.load_module('pywintypes')", sys.modules
# is unchanged - ie, sys.modules['pywintypes'] still refers to *this*
# .py module - but the module's __dict__ has *already* need updated
# with the new module's contents.
# However, on py3k, sys.modules *is* changed - sys.modules['pywintypes']
# will be changed to the new module object.
# SO: * on py2k don't need to update any globals.
# * on py3k we update our module dict with the new module's dict and
# copy its globals to ours.
old_mod = sys.modules[modname]
# Python can load the module
mod = imp.load_dynamic(modname, found)
# Check the sys.modules[] behaviour we describe above is true...
if sys.version_info < (3,0):
#The fudge bit !!!!!!!!!!!!!!!!!
#assert sys.modules[modname] is old_mod
#assert mod is old_mod
pass
else:
assert sys.modules[modname] is not old_mod
assert sys.modules[modname] is mod
# as above - re-reset to the *old* module object then update globs.
sys.modules[modname] = old_mod
globs.update(mod.__dict__)
Traceback
mod_wsgi (pid=7164): Exception occurred processing WSGI script 'E:/Programming/django_site/extranet_site/apache/django.wsgi'.
Traceback (most recent call last):
File "C:\\Python26\\lib\\site-packages\\django\\core\\handlers\\wsgi.py", line 241, in __call__
response = self.get_response(request)
File "C:\\Python26\\lib\\site-packages\\django\\core\\handlers\\base.py", line 73, in get_response
response = middleware_method(request)
ile "C:\\Python26\\lib\\site-packages\\django\\contrib\\sessions\\middleware.py", line 10, in process_request
engine = import_module(settings.SESSION_ENGINE)
File "C:\\Python26\\lib\\site-packages\\django\\utils\\importlib.py", line 35, in import_module
__import__(name)
File "C:\\Python26\\lib\\site-packages\\django\\contrib\\sessions\\backends\\db.py", line 2, in <module>
from django.contrib.sessions.models import Session
File "C:\\Python26\\lib\\site-packages\\django\\contrib\\sessions\\models.py", line 4, in <module>
from django.db import models
File "C:\\Python26\\lib\\site-packages\\django\\db\\models\\__init__.py", line 12, in <module>
from django.db.models.fields.files import FileField, ImageField
File "C:\\Python26\\lib\\site-packages\\django\\db\\models\\fields\\files.py", line 8, in <module>
from django.core.files.storage import default_storage
File "C:\\Python26\\lib\\site-packages\\django\\core\\files\\storage.py", line 7, in <module>
from django.core.files import locks, File
File "C:\\Python26\\lib\\site-packages\\django\\core\\files\\locks.py", line 25, in <module>
import pywintypes
File "C:\\Python26\\lib\\site-packages\\win32\\lib\\pywintypes.py", line 124, in <module>
__import_pywin32_system_module__("pywintypes", globals())
File "C:\\Python26\\lib\\site-packages\\win32\\lib\\pywintypes.py", line 114, in __import_pywin32_system_module__
assert sys.modules[modname is old_mod
AssertionError