11

CentOS にデプロイされた Django アプリケーションがあります。私の httpd.conf ファイルは次のようになります。

WSGISocketPrefix /var/run/wsgi
<VirtualHost *:80>

    WSGIDaemonProcess safe python-path=/usr/lib/python2.6/site-packages
    WSGIProcessGroup safe
    WSGIScriptAlias / /opt/safe/safe/wsgi.py

    <Directory /opt/safe/safe/>
        Order deny,allow
        Allow from all
     </Directory>
</VirtualHost>

編集:これは私のものですTEMPLATE_DIRS

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    "/opt/safe/static/templates",
    "/var/www/html/static/templates",
)

編集:これは私の管理者/メール設定です:

ADMINS = (
# ('Your Name', 'your_email@example.com'),
('David', 'david@localhost'),
)

SEND_BROKEN_LINK_EMAILS = True

DEFAULT_FROM_EMAIL = 'david@localhost'
SERVER_EMAIL = DEFAULT_FROM_EMAIL

500.htmlテンプレート ディレクトリに、カスタムファイルを定義しました。mysettings.pyを haveに設定するとDEBUG = False、このカスタム 500.html ページが表示されない限り、サイトのどこにもアクセスできません。

さらに奇妙なのは、ログ ファイルにエラーがないことです。そのため、どこを見ればよいか、どのように進めればよいかわかりません。カスタム 500.html ファイルが原因でテンプレートが表示されることはわかっていますが、500 Internal Server エラーの原因がわかりません。

編集:さらに構成した後、いくつかのエラー出力を取得できました(@Matt Stevensのおかげです)。ログ出力は次のとおりです:

Traceback (most recent call last):
File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py", line 89, in get_response
response = middleware_method(request)
File "/usr/lib/python2.6/site-packages/django/middleware/common.py", line 55, in process_request
host = request.get_host()
File "/usr/lib/python2.6/site-packages/django/http/__init__.py", line 223, in get_host
"Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): %s" % host)
SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): [my ip address]
4

2 に答える 2

12

自分の IP アドレスをファイルの「ALLOWED_HOSTS」に追加する必要があることがわかりましたsettings.py。エラーロギングのおかげで、ようやくそれを見ることができました。

実際のコード:

ALLOWED_HOSTS = ['my.server.ip.address']

Apache の再起動後、すべてが正常に機能するようになりました。

于 2013-02-27T14:13:48.767 に答える
9

すべてをファイルに記録して、原因を突き止めることができます。

システムに django のログファイルを追加します。

sudo mkdir /var/log/django
sudo touch /var/log/django/error.log
sudo chown <user>:<user> /var/log/django/error.log
chmod 600 /var/log/django/error.log

次に、これを追加しsettings.pyます:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        },
        'logfile': {
            'class': 'logging.handlers.WatchedFileHandler',
            'filename': '/var/log/django/error.log'
        },
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
        'django': {
            'handlers': ['logfile'],
            'level': 'ERROR',
            'propagate': False,
        },
    }
}

ほら!djangoサーバーを実行するだけで、less /var/log/django/error.log何が問題なのかがわかります。

于 2013-02-26T22:17:18.113 に答える