62

私の単純な 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())
4

3 に答える 3

1

これは解決策ではありませんが、デバッグの目的で、settings.py で ALLOWED_HOSTS 設定を次のように設定できます。

ALLOWED_HOSTS = ['*']

それは間違いなくうまくいくはずです。そうでない場合、少なくとも、Django が特定の URL へのアクセスを拒否していないことが問題であることがわかります。

于 2014-12-16T10:04:28.617 に答える