2011-05-11 8 views
7

Tengo dos sitios django que usan la misma base de datos y comparten parte del código. El principal sitio principal es una extranet para el personal y los contratistas, mientras que el segundo sitio expone algunos de los datos a algunos de nuestros socios.Múltiples sitios django en Apache/Windows/mod_wsgi - problema con win32

He logrado configurar sitios para que funcionen, pero me di cuenta de que si lancé Apache y fui al sitio principal, el sitio asociado no funcionaría, devolviendo un "Error interno del servidor". Si reiniciara y entrara al sitio asociado, entonces el sitio principal no funcionaría.

Supongo que tienen conflictos de recursos.

El registro del servidor (ver abajo) muestra que es un problema con el módulo win32/lib/pywintypes.py, línea 114. En otro lugar, se ha sugerido comentar estas líneas (ver a continuación). Así que lo intenté y funciona.

Realmente no entiendo lo que está pasando en el código y si comentarlo solo me causará problemas más adelante. Entonces la pregunta es:

¿Hay algo más que pueda estar causando esto? ¿Es esto dulce de azúcar "seguro" de hacer?

# 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__) 

Rastreo

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    

Respuesta

1

Instalación pywin32 # 212 resolvió el problema.

0

Tuve este mismo problema (usando Python 2.7, Django 1.4.1, Apache 2.2, mod_wsgi 3.3) y lo resolví quitando pywin32 (ver.217). Django intenta importar desde pywin32, pero parece que no lo requiere. Si necesita Pywin32 en su sitio Django, esta no es la respuesta para usted, pero acabo de tenerlo instalado y no lo estaba usando.

EDIT: En realidad estaba usando virtualenv para mis sitios, pero mi principal Python tenía una fuga en Si necesita pywin32 en algunas cosas, entonces utiliza virtualenv, y leer esta página wiki en mod_wsgi y entornos virtuales:.

VirtualEnvironments - mod_wsgi

1

que trabajó para mí después de retirar pywin32 y el uso de WSGIScriptAlias ​​"/ aliasName" "c: /wamp/www/project/django.wsgi" En httpd.config Use comillas para el primer parámetro también.

1

Me encontré con esto en la versión 217, pero necesitaba pywin32. Implementando arreglo desde aquí https://stackoverflow.com/a/10928148/80516 parece funcionar.

Bug se informa, pero no se resuelve:

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

solución temporal es comentar dos líneas en 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

solamente agregar presupuestos en httpd.conf (como lo sugiere kiran.gilvaz) fue en mi caso suficiente para resolver el problema. No eliminé pywin32 (pywin32 era la versión 218).

Cuestiones relacionadas