Включение DEBUG на производственной площадке Django - PullRequest
0 голосов
/ 04 марта 2010

Я использую Django ORM в приложении, отличном от Django, и хочу включить параметр DEBUG , чтобы я мог периодически регистрировать свои запросы. Поэтому у меня есть что-то смутное, похожее на это:

from django.db import connection

def thread_main_loop():
    while keep_going:
        connection.queries[:] = []
        do_something()
        some_logging_function(connection.queries)

Я хотел бы сделать это на моем производственном сервере, но документ предупреждает: "Также важно помнить, что при работе с включенным DEBUG Django запоминает каждый выполняемый запрос SQL. вы отлаживаете, но на рабочем сервере он быстро потребляет память. "

Поскольку список connection.queries очищается каждый раз в основном цикле каждого потока, я считаю, что ведение журнала запросов Django не приведет к тому, что мое приложение будет использовать память. Это правильно? И есть ли другие причины не включать DEBUG в производственную среду, если я использую только Django ORM?

1 Ответ

2 голосов
/ 04 марта 2010

В режиме DEBUG любая ошибка в вашем приложении приведет к подробной трассировке стека Django.Это очень нежелательно в производственной среде, поскольку, вероятно, приведет к утечке конфиденциальной информации, которую злоумышленники могут использовать против вашего сайта.Даже если ваше приложение выглядит довольно стабильным, я бы не стал рисковать.

Я бы предпочел использовать промежуточное ПО, которое каким-то образом регистрирует запросы в файл.Или взять статистику базы данных напрямую, например (для MySQL).

watch -n 1 mysqladmin --user=<user> --password=<password> processlist

Редактировать:

Если вы используете только Django ORM, то на самом деле только двавсе будет иначе:

  • Запросы будут сохраняться с помощью CursorDebugWrapper
  • Если запрос приводит к предупреждению базы данных, это вызовет исключение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...