2011-05-11 57 views
7

问题我已经使用相同的数据库,并分享一些代码两个Django的网站。主要父母网站是员工和承包商的外联网,而第二个网站向少数我们的合作伙伴公开了一些数据。多个Django站点 - 在Win32

我已成功地建立了网站工作,但发现,如果我启动Apache和进入主站点,然后合作伙伴网站是行不通的,返回一个“内部服务器错误”。如果我重新启动并进入合作伙伴网站,那么主网站将无法工作。

所以我猜他们在资源上是相互冲突的。

服务器日志(请参阅下方)显示它是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    

回答

1

安装pywin32#212解决了这个问题。

0

我有同样的问题(使用Python 2.7,则Django 1.4.1,阿帕奇2.2,mod_wsgi的3.3)和通过除去pywin32(ver.217)解决它。 Django尝试从pywin32导入,但似乎并不需要它。如果你需要Django站点中的pywin32,这不是你的答案,但我只是安装它并没有使用它。

编辑:实际上,我是用的virtualenv为我的网站,但我的主要的Python漏水如果您确实需要pywin32在某些事情上,然后用virtualenv中,并在mod_wsgi的和虚拟的环境中阅读此维基页面:

VirtualEnvironments - mod_wsgi

1

它为我除去pywin32和使用 WSGIScriptAlias “/ aliasname的” “C后:第一个参数也/wamp/www/project/django.wsgi” 在httpd.config 使用引号。

1

我在版本217上遇到了这个问题,但我需要pywin32。从这里执行修复https://stackoverflow.com/a/10928148/80516似乎工作。

的Bug报告,但没有得到解决:

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

只在我的情况下,在httpd.conf中添加引号(正如kiran.gilvaz所建议的)足以解决问题。我没有删除pywin32(pywin32是版本218)。