我有两个django站点使用相同的数据库并共享一些代码。主要的父网站是员工和承包商的外联网,而第二个网站则向我们的一些合作伙伴公开了一些数据。
我已设法设置网站工作,但发现如果我启动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
答案 0 :(得分:1)
安装pywin32#212解决了这个问题。
答案 1 :(得分:1)
删除pywin32并使用后,它对我有用 WSGIScriptAlias“/ aliasname”“c:/wamp/www/project/django.wsgi” 在httpd.config中 对第一个参数也使用引号。
答案 2 :(得分: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__)
答案 3 :(得分:0)
我有同样的问题(使用Python 2.7,Django 1.4.1,Apache 2.2,mod_wsgi 3.3)并通过删除pywin32(ver.217)解决了这个问题。 Django尝试从pywin32导入,但似乎不需要它。如果您在Django站点中需要pywin32,这不是您的答案,但我刚安装它并且没有使用它。
编辑:我实际上是在为我的网站使用virtualenv,但是我的主要Python正在泄漏。如果你确实需要pywin32,那么使用virtualenv,并在mod_wsgi和虚拟环境中阅读这个wiki页面:答案 4 :(得分:0)
只在httpd.conf中添加引号(由kiran.gilvaz建议)在我的情况下足以解决问题。我没有删除pywin32(pywin32是版本218)。