2012-09-04 83 views
2

我正在爲一個緩存層運行帶memcached後端的Django 1.3實例,最近我一直在試圖調試應用程序的數據庫的一部分,但是每當我使memcached服務器脫機時,出現以下錯誤:爲什麼當Memcached出現故障時Django會失敗?

AttributeError at /joinerysoft/contacts/ajax/all/None/None/ 
'NoneType' object has no attribute 'sendall' 
Request Method: GET 
Request URL: http://joinerysoft-directory.co.uk/joinerysoft/contacts/ajax/all/None/None/ 
Django Version: 1.3.1 
Exception Type: AttributeError 
Exception Value: 'NoneType' object has no attribute 'sendall' 
Exception Location: /usr/lib/python2.7/dist-packages/memcache.py in send_cmd, line 1112 
Python Executable: /usr/bin/python 
Python Version: 2.7.3 

我想的memcached +的Django吸引人的地方是,如果內存緩存中消失,您的網站仍會功能(雖然殘廢),直到它返回。我確實使用Django的內置緩存。

回答

1

首先,這不是來自Django的錯誤,而是來自python-memcached庫。 第二我認爲這種行爲是一致的。如果您將Django配置爲使用memcached並且它停止運行,那麼它應該拋出一個錯誤!假設你的網站在很大程度上依賴於緩存,你也希望儘快知道是否發生了什麼事情,並且在幾天後還沒有弄清楚你的整個數據庫是否因爲存在太多查詢(作爲例子)而關閉。

有些方法可以定義備用緩存或執行其他解決方法。看看這個類似的問題:Is there a way to ignore Cache errors in Django?

+2

因此它應該完全刪除服務,而不是優雅地退化?在我看來,那就是糟糕的設計。當然你想知道你的memcached服務器全部關閉,並且你只是在DB上運行,但是通過錯誤日誌記錄機制處理不是更好,而不是錯誤地向用戶輸出 – Jharwood

+0

@Jharwood我認爲你總是可以構建一個可以優雅地處理這些錯誤的包裝器。 –

+0

我想你可以 – Jharwood

相關問題