2010-03-04 4 views
0

Django가 아닌 애플리케이션에서 Django ORM을 사용 중이므로 DEBUG 설정을 사용하여 정기적으로 쿼리를 기록 할 수 있습니다. 그래서 막연하게 이런 일이 :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 쿼리 로깅이 내 응용 프로그램에서 메모리를 소비하지 않을 것이라고 생각합니다. 이 올바른지? 그리고 Django ORM 만 사용한다면 프로덕션 환경에서 DEBUG를 켜지 않는 다른 이유가 있습니까?

답변

2

DEBUG 모드에서 응용 프로그램에 오류가 있으면 자세한 장고 스택 트레이스로 연결됩니다. 공격자가 사이트에서 사용할 수있는 중요한 정보가 누출 될 수 있으므로 프로덕션 환경에서는 매우 바람직하지 않습니다. 응용 프로그램이 상당히 안정적으로 보이더라도 위험하지 않습니다.

필자는 어떻게 든 쿼리를 파일에 기록하는 미들웨어를 사용하려고합니다. 또는 데이터베이스 통계를 직접 가져올 수 있습니다 (예 : MySQL의 경우).

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

편집 :

만 장고 ORM을 사용하는 경우, 다음 AFAIK 두 가지가 다를 수 :

  • 을 조회 CursorDebugWrapper에 저장됩니다
  • 하는 경우 쿼리 결과 데이터베이스 경고가 발생하면 예외가 발생합니다.
+0

잘 말했듯이, 우리는 ORM 만 사용하기 때문에 DEBUG를 켠 상태에서도 서버가 스택 추적을 신뢰할 수없는 제 3 자에게 공개하지 않습니다. DEBUG을 사용하지 않는 것을 알고있는 다른 이유가 있습니까? –

+1

아 맞아, 나는 내 대답을 연장했다. – stefanw

관련 문제