2011-05-11 7 views
7

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    

Répondre

1

Installation pywin32 # 212 a résolu le problème.

0

J'ai rencontré le même problème (en utilisant Python 2.7, Django 1.4.1, Apache 2.2, mod_wsgi 3.3) et je l'ai résolu en supprimant pywin32 (ver.217). Django essaie d'importer à partir de pywin32, mais ne semble pas l'exiger. Si vous avez besoin de pywin32 sur votre site Django, ce n'est pas la solution pour vous, mais je l'ai juste installé et je ne l'utilisais pas.

EDIT: J'utilise réellement virtualenv pour mes sites, mais mon principal Python avait une fuite dans Si vous avez besoin pywin32 dans certaines choses, puis utilisez virtualenv et lisez cette page wiki sur mod_wsgi et environnements virtuels:.

VirtualEnvironments - mod_wsgi

1

Il a fonctionné pour moi après avoir enlevé pywin32 et en utilisant WSGIScriptAlias ​​"/ aliasName" "c: /wamp/www/project/django.wsgi" Dans httpd.config Utilisez les guillemets pour le premier paramètre aussi.

1

J'ai couru dans ce sur la version 217, mais j'avais besoin de pywin32. Implémentation d'un correctif à partir d'ici https://stackoverflow.com/a/10928148/80516 semble fonctionner.

Bug est rapporté, mais pas résolu:

https://sourceforge.net/tracker/?func=detail&aid=2905909&group_id=78018&atid=551954

solution temporaire est en commentaire deux lignes win32/lib/pywintypes.py:

if sys.version_info < (3,0): 
    #next two lines are problematic!!!!! 
    #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__) 
0

seulement l'ajout de citations dans httpd.conf (comme suggéré par kiran.gilvaz) était dans mon cas assez pour résoudre le problème. Je n'ai pas supprimé pywin32 (pywin32 était la version 218).

Questions connexes