अपाचे/विंडोज/mod_wsgi पर एकाधिक django साइटों-win32 के साथ समस्या




apache mod-wsgi (4)

मेरे पास दो डीजाँगो साइटें हैं जो समान डेटाबेस का उपयोग करती हैं और कुछ कोड साझा करती हैं I मुख्य अभिभावक साइट कर्मचारियों और ठेकेदारों के लिए एक एक्स्ट्रानेट है, जबकि दूसरी साइट कुछ साझेदारों के लिए कुछ डेटा को उजागर करती है।

मैंने काम करने के लिए साइट्स स्थापित करने में कामयाब हुए हैं लेकिन पाया कि अगर मैंने अपाचे शुरू किया और मुख्य साइट पर चला गया, तो भागीदार साइट काम नहीं करेगी, "आंतरिक सर्वर त्रुटि" लौटाएगी अगर मैं पुनः आरंभ और भागीदार साइट में गया, तो मुख्य साइट काम नहीं करेगी

इसलिए मुझे लगता है कि वे संसाधनों पर विरोधाभासी हैं।

सर्वर लॉग (नीचे देखें) से पता चलता है कि यह win32 / lib / pywintypes.py मॉड्यूल, लाइन 114 के साथ एक समस्या है। अन्यथा, इन लाइनों को टिप्पणी करने का सुझाव दिया गया है (नीचे देखें)। इसलिए मैंने यह कोशिश की है और यह काम करता है।

मैं वास्तव में यह नहीं समझता कि कोड में क्या चल रहा है और यह टिप्पणी करने के बाद ही मुझे बाद में समस्याएं पैदा करने जा रही हैं। तो सवाल है:

क्या ऐसा कुछ हो रहा है जिसके कारण ऐसा हो सकता है? क्या यह छेड़छाड़ करने के लिए 'सुरक्षित' है?

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

वापस ट्रेस करें

    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              

Pywin32 # 212 को स्थापित करने से समस्या हल हो गई


केवल httpd.conf में उद्धरण (जैसा कि किरण gilvaz द्वारा सुझाव दिया गया है) को जोड़कर मेरे मामले में समस्या को हल करने के लिए पर्याप्त था। मैं pywin32 (pywin32 संस्करण 218) को हटा नहीं था।


मैं इसे संस्करण 217 पर चला गया, लेकिन मुझे pywin32 की आवश्यकता है यहां से ठीक से कार्यान्वित करना https://.com/a/10928148/80516 काम करने लगता है

बग की रिपोर्ट है, लेकिन हल नहीं:

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

अस्थायी समाधान 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__)

यह pywin32 को हटाने और WSGIScriptAlias ​​"/ aliasname" "c: /wamp/www/project/django.wsgi" का उपयोग करने के बाद मेरे लिए काम किया है httpd.config में पहले पैरामीटर के लिए भी उद्धरण चिह्नों का उपयोग करें