2010-03-04 58 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) 

我想這樣做我的生產服務器上,但商務部警告說,「同樣重要的是要記住,使用調試運行時開啓,Django會記得每執行一次SQL查詢,這在調試時很有用,但在生產服務器上,它將快速消耗內存。「

因爲connection.queries列表每次通過每個線程的主循環被清除,我相信Django查詢日誌記錄不會導致我的應用程序消耗內存。它是否正確?如果我只使用Django ORM,是否還有其他原因不會在生產環境中關閉DEBUG?

回答

2

DEBUG模式您的應用程序中的任何錯誤將導致詳細的Django stacktrace。這在生產環境中是非常不可取的,因爲它可能會泄露攻擊者可以在您的網站上使用的敏感信息。即使你的應用程序看起來很穩定,我也不會冒險。

我寧願僱用一個以某種方式將查詢記錄到文件的中間件。或直接統計數據庫,例如(對於MySQL)。

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

編輯:

如果你只使用Django的ORM,那麼據我所知只有兩件事情會有所不同:

  • 查詢將被保存在CursorDebugWrapper
  • 如果查詢會導致數據庫警告,這會引發異常。
+0

好吧,正如我所說的,我們只使用ORM,所以即使DEBUG打開,我們的服務器也不會將我們的堆棧跟蹤暴露給不受信任的第三方。您有沒有其他原因讓您知道不使用DEBUG? – 2010-03-04 17:01:54

+1

哦,對了,我擴展了我的答案。 – stefanw 2010-03-05 09:37:58