Ruby on Rails:清除缓存页面

时间:2010-03-17 14:13:38

标签: ruby-on-rails caching

我有一个在开发环境中缓存页面的RoR应用程序(ruby v1.8.7; rails v2.3.5)。这不是一个问题,但缓存页面的a元素不正确。

我没有对development.rb文件进行任何更改,我也没有故意向控制器添加任何缓存命令。

我已经尝试清除此网站(localhost)上的浏览器(OSX上的Firefox 3.5)cookie和页面缓存。我也重启了Mongrel。似乎没有任何帮助。

我错过了什么?

6 个答案:

答案 0 :(得分:114)

development.rb中的这一行确保不会发生缓存。

config.action_controller.perform_caching             = false

您可以使用

清除Rails缓存
Rails.cache.clear

那就是说 - 我不相信这是一个缓存问题。您是否对页面进行了更改而没有反映出来?您是不是正在查看该页面的实时版本?我做过一次(脸红)。

更新:

您可以在控制台中调用该命令。 您确定要在开发中运行该应用程序吗?

唯一的选择是您尝试呈现的页面不是正在呈现的页面。

如果你观察服务器输出,你应该能够在页面渲染时看到渲染命令:

Rendered shared_partials/_latest_featured_video (31.9ms)
Rendered shared_partials/_s_invite_friends (2.9ms)
Rendered layouts/_sidebar (2002.1ms)
Rendered layouts/_footer (2.8ms)
Rendered layouts/_busy_indicator (0.6ms)

答案 1 :(得分:102)

rake tmp:cache:clear可能就是你要找的东西。

答案 2 :(得分:24)

我可以通过清理资产缓存来解决此问题:

$ rake assets:clean

答案 3 :(得分:4)

在/ public中检查页面的静态版本,如果存在则将其删除。当Rails 3.x缓存页面时,它会在您的公用文件夹中保留静态版本,并在用户访问您的站点时加载该版本。即使在清除缓存后,这仍将保留。

答案 4 :(得分:2)

如果您正在执行fragment caching,则可以通过更新缓存密钥来手动中断缓存,如下所示:

版本#1

<% cache ['cool_name_for_cache_key', 'v1'] do %>

版本#2

<% cache ['cool_name_for_cache_key', 'v2'] do %>

或者您可以根据非静态对象的状态自动重置缓存,例如ActiveRecord对象,如下所示:

<% cache @user_object do %>

使用此^方法,每次更新用户对象时,缓存都将自动重置。

答案 5 :(得分:1)

更多深奥的方式:

Rails.cache.delete_matched("*")

对于Redis:

Redis.new.keys.each{ |key| Rails.cache.delete(key) }