2012-09-04 47 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

相关问题