我正在尝试在我的项目中使用django-social-auth。 它在我的本地计算机上运行良好(使用manage.py runserver),但在我的hoster(locum.ru)服务器上失败(使用mod_wsgi)。
我在服务器上的django日志中看到了这一点:
[2012-06-26 22:19:24,796] DEBUG [django.db.backends:44] (0.000) SET FOREIGN_KEY_CHECKS=0;; args=()
[2012-06-26 22:19:24,817] DEBUG [django.db.backends:44] (0.000) SELECT `django_session`.`session_key`, `django_session`.`session_dat
a`, `django_session`.`expire_date` FROM `django_session` WHERE (`django_session`.`session_key` = 392a94a6d2a667ff755a9d45a79582d0 AN
D `django_session`.`expire_date` > 2012-06-26 22:19:24 ); args=('392a94a6d2a667ff755a9d45a79582d0', u'2012-06-26 22:19:24')
[2012-06-26 22:19:24,857] DEBUG [myapp.context_processors:11] Adding something to context.
(myapp.context_processors只是一个简单的上下文处理器,除了通知我它被调用之外什么都不做)
,这在error.log中:
[Tue Jun 26 22:19:24 2012] [error] [client 34.34.34.34] Premature end of script headers: django.wsgi
当我在我的settings.py中关闭django-social-auth时,一切正常。当我打开它 - 它失败了!
我在服务器上有本地python 2.7.3和python 2.6.6(但它没有社交认证,所以它不是问题,我认为......)和Django 1.3.1。
任何人都可以给我一个提示在哪里挖掘吗?
UPD:我添加了一些日志记录,现在我看到它在从social_auth导入时失败了:
logger.debug('Before import from social_auth')
from social_auth.views import complete, auth, disconnect
logger.debug('After import from social_auth')
“导入前......”出现在调试日志中,“After ...”没有。但它适用于我的本地桌面!魔术在哪里?!
UPD2:我在social_auth中添加了一些日志,现在我看到social_auth导入python-openid,openid.yadis.extrd运行这行:
from openid.oidutil import importElementTree
ElementTree = importElementTree()
和importElementTree()包含:
for mod_name in module_names:
try:
logger.debug('importElementTree - 2 - ' + mod_name)
ElementTree = __import__(mod_name, None, None, ['unused'])
logger.debug('importElementTree - 3 - ' + mod_name)
except ImportError:
logger.debug('importElementTree - except ImportError')
pass
出现日志文件中的:
[2012-06-30 09:18:51,186] DEBUG [shoplist:39] In openid.yadis.extrd - 5
[2012-06-30 09:18:51,186] DEBUG [shoplist:56] importElementTree
[2012-06-30 09:18:51,186] DEBUG [shoplist:61] importElementTree - 1
[2012-06-30 09:18:51,186] DEBUG [shoplist:64] importElementTree - 2 - lxml.etree
因此,它无法导入lxml.etree,但不会抛出ImportError。为什么? 我检查了我在本地计算机和服务器上有相同版本的django-social-auth,python-openid和python-lxml。它仍然无法在服务器上运行!
答案 0 :(得分:0)
表示您可能正在使用守护程序模式位进程崩溃。如果您无法看到主Apache错误日志而且只能看到虚拟主机,则可能无法看到崩溃消息。
看看你是否可以强制应用程序在进程内的主解释器中运行而不是子解释器。
http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API