私の単純な Django アプリはデバッグ モード ( manage.py runserver
) で正常に動作し、開発ボックスの WSGI + Apache で動作しますが、EC2 にプッシュするとBad Request (400)
、どの URL に対しても断続的に (10 ~ 80% の確率で) エラーが発生し始めました。ビュー(私のアプリでもDjango admin.
これに関するデバッグ情報はどこにありますか? /var/log/apache2/error.log
があっても、には何も表示されませんLogLevel=info
。バージョンを確認し、リクエスト環境をログに記録しました ( ModWSGI Debugging Tipsを参照)。大きな違いは見られません。
私が持っていた残りの1つの考えは、Python 2.7.1に対してビルドされたUbuntu 12.04(libapache2-mod-wsgi 3.3-4build1)のmod_wsgiを使用していることです。私はPython 2.7.3を持っています。また、Django は 1.6 で、Ubuntu Precise バージョンよりも新しいです。クリーンアップが非常に難しく、マイナーなバージョン変更のように見えるため、ソースからパッケージをビルドすることをためらっています...
ご協力ありがとうございました。
(参考までに、ここに Apache 構成と WSGI アプリを示します)
Apache 構成 (000-デフォルト)
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
WSGIScriptAlias /rz /usr/local/share/rz/rz.wsgi
...
rz.WSGI アプリ
import os
import sys
import django.core.handlers.wsgi
import pprint
path = '/usr/local/share/rz'
if path not in sys.path:
sys.path.insert(0, path)
os.environ['DJANGO_SETTINGS_MODULE'] = 'rz.settings'
class LoggingMiddleware:
def __init__(self, application):
self.__application = application
def __call__(self, environ, start_response):
errors = environ['wsgi.errors']
pprint.pprint(('REQUEST', environ), stream=errors)
def _start_response(status, headers, *args):
pprint.pprint(('RESPONSE', status, headers), stream=errors)
return start_response(status, headers, *args)
return self.__application(environ, _start_response)
application = LoggingMiddleware(django.core.handlers.wsgi.WSGIHandler())