0

我正在尝试在我的项目中使用 django-social-auth。它在我的本地计算机上运行良好(使用 manage.py runserver),但在我的主机(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')

“导入之前...”出现在调试日志中,“之后...”没有。但它适用于我的本地桌面!魔法在哪里?!

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。它仍然无法在服务器上运行!

4

1 回答 1

0

表示您可能正在使用进程正在崩溃的守护进程模式位。如果您看不到主要的 Apache 错误日志并且只有虚拟主机,您可能看不到崩溃消息。

看看您是否可以强制应用程序在进程内的主解释器中运行,而不是在子解释器中运行。

http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API

于 2012-06-27T02:06:39.423 回答