django — nginx fastcgi —> Необработанное исключение (после обновления с Django 1.2.4 до Django 1.3)

#django #nginx #fastcgi #django-settings #mod-fastcgi

#django #nginx #fastcgi #django-настройки #мод-fastcgi

Вопрос:

Я только что обновился с django 1.2.4 до 1.3.

Я использую nginx в сочетании с fastcgi и по какой-то причине каждый раз, когда я захожу на страницу, я получаю эту ошибку:

 Unhandled Exception

An unhandled exception was thrown by the application.
  

Есть идеи, в чем может заключаться проблема?

Комментарии:

1. не могли бы вы добавить в свой error.log файл pastebin и, возможно, файлы конфигурации.

2. @ashwoods Я нашел кое-что в файле /var/log/nginx/localhost.error_log: File «/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py «, строка 51, в load_middleware вызывает исключения. Неправильно сконфигурировано (‘Модуль промежуточного программного обеспечения «%s» не определяет класс «%s»‘ % (mw_module, mw_classname)) Неправильно сконфигурировано: модуль промежуточного программного обеспечения «django.middleware.http» не определяет класс «SetRemoteAddrFromForwardedFor» при чтении заголовка ответа из восходящего потока, клиент: 192.168.1.1, сервер: mysite.com , запрос: «GET /home/ HTTP/1.1», восходящий поток: «fastcgi://127.0.0.1:1234», хост: «mysite.com »

Ответ №1:

Вам необходимо отследить свой журнал ошибок fastcgi. Там должна быть более подробная информация.

Комментарии:

1. Я не уверен, есть ли у fastcgi журнал ошибок, но я заглянул в /var/log/nginx/error.log и ничего не нашел.

Ответ №2:

Чтобы исправить это, я добавил этот класс (который практически ничего не делает) в : /usr/local/lib/python2.6/dist-packages/django/middleware/http.py

 class SetRemoteAddrFromForwardedFor(object):
    """
    This middleware has been removed; see the Django 1.1 release notes for
    details.

    It previously set REMOTE_ADDR based on HTTP_X_FORWARDED_FOR. However, after
    investiagtion, it turns out this is impossible to do in a general manner:
    different proxies treat the X-Forwarded-For header differently. Thus, a
    built-in middleware can lead to application-level security problems, and so
    this was removed in Django 1.1

    """
    def __init__(self):
        import warnings
        warnings.warn("SetRemoteAddrFromForwardedFor has been removed. "
                      "See the Django 1.1 release notes for details.",
                      category=DeprecationWarning)
        raise MiddlewareNotUsed()