プロジェクトで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をオフにすると、すべてが正常に機能します。オンにすると失敗します!
私はローカルにpython2.7.3を、サーバーにpython 2.6.6を持っています(しかし、social-authなしで動作するので、問題ではないと思います...)とDjango1.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があることを確認しました。そしてそれはまだサーバー上で動作しません!