cache是系统中必不可少的东西,那么cache的有效期,何时清除过时的cache就显得更加有意思的一个话题。Sweeper Generator 顾名思义是一个Generator,清除过时的cache
0:) cache
Rails中目前有三种cache
caches_pages
caches_action
caches_fragment
cache还不懂?那就先收藏着吧,等下次有时间开个专题讨论一下cache,这里就不废话了。
1:) 安装
ruby script/plugin install http://topfunky.net/svn/plugins/sweeper
2:) 使用
运行
ruby script\generate
可以看到sweeper
Installed Generators
Plugins: sweeper
我们使用cache Fragment在页面上缓存论坛分类
<% cache(cache_key('categories')) do -%>
....
<%end%>
启动server,浏览页面,第一次运行会看到
Cached fragment: localhost:3000/cache/categories (0.00000)
同时在cache目录下找到 categories .cache文件,打开浏览,你会看到正式你浏览页面的html文件
刷新页面,再次浏览,会看到
Fragment read: localhost:3000/cache/categories (0.00000)
执行查询分类的sql已经不在运行了,仅仅是读取cache的文件而已。
ok,转到后台,新增分类,再转前台,刷新
Fragment read: localhost:3000/cache/categories (0.00000)
刚才添加的新分类怎么没了??
是缓存的原因,当前的页面片段存在缓存,而我们刚才新增加的分类后,并没有删除过时的cache,手工删除categories.cache,再删除
Cached fragment: localhost:3000/cache/categories (0.00000)
OK,成功了。
可是这样繁琐了点:(
不怕:) rails自有利器,该Observer发挥作用了 (Observer是什么?OH, NO,这个,建议你没事看看设计模式,简单点说就是一个观察着模式),而Sweeper用的也是这个
先来看一下Sweeper Generator的usage
./script/generate sweeper SweeperName callback1 callback2
OK,我们来生成我们想要的东西
ruby script/generate sweeper Record after_save after_update after_destroy
生成
class RecordSweeper < ActionController::Caching::Sweeper
def after_save(record)
end
def after_update(record)
end
def after_destroy(record)
end
end
添加我们观察的对象
observe Forum
当新建forum时候,我们删除掉过时的cache
def after_save(record)
expire_fragment(cache_key('categories'))
end
在你的environment中添加
config.active_record.observers = :record_sweeper
现在转到后台,新增分类测试下。当提交时,会发现console多了几条信息
Expired fragment: localhost:3000/cache/categories (0.00000)
cache已经清楚了
再次浏览index会发现重新生成了cache
Cached fragment: localhost:3000/cache/categories (0.00000)
分享到:
相关推荐
**Rails 常用插件简介 - CRUD Generator 2** 在Ruby on Rails框架中,开发过程中经常需要创建、读取、更新和删除(CRUD)数据。为了提高开发效率,开发者通常会使用各种插件来自动化这个过程。CRUD Generator 2就是...
在这个“ruby on rails 常用插件下载”中,提到的是一个与多线程相关的插件,可能用于提高应用程序的性能和并发处理能力。 在 Ruby on Rails 中,多线程是一种处理并发请求的方式,尤其在现代硬件支持多核处理器的...
rails.vim提供了常用的一些命令,可以帮助开发,例如:Rgenerate, Rake, Rfind,RTview等,很方便,也很实用。 安装方法: 拷贝 autoload/rails.vim, plugin/rails.vim, 和 doc/rails.txt 到 ~/.vim 目录. ...
Ruby on Rails插件是Rails框架的核心扩展机制,用于弥补Rails本身功能的不足,提供开发者所需的额外特性或功能。Rails插件允许开发人员自定义和增强Rails的任何部分,并且能够以封装和重用的方式与其他开发者共享。...
**Ruby on Rails 开发环境构建:Eclipse与RadRails 插件详解** 在现代软件开发领域,Ruby on Rails(简称Rails)作为一个强大的Web应用程序框架,因其简洁、高效的特性深受开发者喜爱。而Eclipse,作为一款功能强大...
这个插件允许你在Rails应用中轻松地对数据进行分页显示,提高用户体验并减轻服务器压力。 **1. will_paginate插件介绍** `will_paginate`是Rails社区中非常流行的一个分页解决方案,它提供了简洁的API和强大的功能...
6. **Rakefile和init.rb**: Rakefile用于定义任务,如安装或更新插件,而init.rb是Rails初始化脚本,负责加载插件。 7. **版本控制(.svn)**: 这个文件可能表示插件曾使用Subversion作为版本控制系统。现代项目更...
在本文中,我们将深入探讨Rails3中的常用命令,帮助你更高效地进行开发工作。 首先,新建一个Rails项目是开发的起点。你可以使用以下命令创建一个新的工程: ```bash rails new 工程名 ``` 这会生成一个包含所有...
在博文“Rails插件收集”中,作者可能分享了一些常用的Rails插件,比如用于日志分析的`better_errors`和`binding_of_caller`,性能监控的`bullet`,自动化测试的`rspec-rails`,以及数据库查询优化工具`annotate`等...
收集了常用RAILS学习的网址 收集了常用RAILS学习的网址
ruby on rails for eclipse开发插件
Awesome Rails Gem 是一个广泛收录了Rails开发中常用、实用、有趣的Gem的列表,旨在帮助开发者提高开发效率和代码质量。这个中文版的Awesome Rails Gem列表,为国内开发者提供了一个方便的参考资源,使他们能够更好...
这篇博文将讨论如何使用`sitemap_generator` gem在Rails应用中实现这一功能。 首先,让我们了解什么是Sitemap。Sitemap是一个XML文件,它列出了网站的所有页面,包括URL、更新频率和页面重要性等信息。这有助于搜索...
### Ruby on Rails 入门级简介 #### 一、Ruby on Rails 概述 **Ruby on Rails**(简称 Rails 或 RoR)是一种基于 Ruby 语言的 Web 应用框架,它采用了模型-视图-控制器(MVC)架构模式。Rails 由 David Heinemeier...