我通过mod_wsgi在Apache中运行Django。我相信Django正在缓存我的服务器端页面,这导致一些功能无法正常工作。
我有一个倒数计时器,它通过获取当前服务器时间,确定剩余倒计时时间,并将该数字输出到HTML模板来工作。然后,javascript倒计时器接管并运行用户的倒计时。
当用户刷新页面或使用倒数计时器导航到其他页面时,会出现问题。计时器似乎偶尔跳到不同的时间,通常在每次刷新时反复回到同一时间。
使用HTTPFox,页面没有从我的浏览器缓存中加载,所以看起来Django或Apache正在缓存页面。有没有办法禁用此功能?我不会有足够的流量来担心缓存脚本输出。或者我为什么会这样做完全错了?
[编辑]从下面的帖子看,在Django中看起来禁用了缓存,这意味着它必须在其他地方发生,也许在Apache中?
[编辑]我对发生的事情有了更全面的描述:对于服务器发出的前7个(或左右)请求,页面由脚本呈现并返回,尽管这7个页面中的每一个似乎都是缓存,因为它稍后出现。在第8个请求中,服务器提供第一页。在第9个请求中,它提供第二页,依此类推。这将一直持续到我重新启动apache,然后重新开始该过程。
[编辑]我已将mod_wsgi配置为一次只运行一个进程,这会导致计时器在每种情况下都重置为相同的值。有趣的是,我的页面上有另一个组件,在每个请求上显示一个随机图像,使用顺序('?'),并且每次都刷新不同的图像,这表明缓存发生在Django而不是Apache中。
[编辑]根据之前的编辑,我回过头来查看相关的views.py文件,发现倒计时开始变量是在视图函数之外的模块中全局设置的。在视图函数中移动该设置解决了问题。所以事实证明它毕竟不是一个缓存问题。感谢大家的帮助。
答案 0 :(得分:6)
根据我在Apache中使用mod_wsgi的经验,它们极不可能导致缓存。有几件事要尝试:
答案 1 :(得分:2)
我刚看到这个:
支持自动重新加载您可以使用部署工具 激活对自动重新加载的支持。每当事情发生变化时 .wsgi文件,mod_wsgi将为我们重新加载所有守护进程。
为此,只需将以下指令添加到“目录”部分:
WSGIScriptReloading On
答案 2 :(得分:1)
您是否专门设置了Django缓存?从文档看来,你似乎清楚地知道Django是否正在缓存,因为它需要事先工作以使其工作。具体来说,您需要定义缓存文件的保存位置。
答案 3 :(得分:1)
您是否正在为Apache / mod_wsgi使用多进程配置?如果是,那将解释为什么不同的响应可以具有不同的计时器值,因为初始化计时器的可能性对于每个处理处理请求是不同的。这就是为什么它可以跳来跳去。
阅读:
http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading
确定运行Apache / mod_wsgi的模式或配置,并发布该配置。不知道,有太多未知数。