我有一个 RoR 应用程序(ruby v1.8.7; rails v2.3.5),在开发环境中缓存了一个页面。这本来不是什么问题,但是缓存的页面中的 a
元素是错误的。
我没有对 development.rb 文件进行任何更改,也没有故意向控制器添加任何缓存命令。
我尝试清除浏览器(OSX 上的 Firefox 3.5)的 cookie 和该站点(localhost)的页面缓存。我还重新启动了 Mongrel,但似乎都没起作用。
我错过了什么?
我有一个 RoR 应用程序(ruby v1.8.7; rails v2.3.5),在开发环境中缓存了一个页面。这本来不是什么问题,但是缓存的页面中的 a
元素是错误的。
我没有对 development.rb 文件进行任何更改,也没有故意向控制器添加任何缓存命令。
我尝试清除浏览器(OSX 上的 Firefox 3.5)的 cookie 和该站点(localhost)的页面缓存。我还重新启动了 Mongrel,但似乎都没起作用。
我错过了什么?
在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)
rake tmp:cache:clear
可能是您要寻找的内容。
RAILS_ENV=staging bundle exec rake tmp:cache:clear
,否则我猜它不会起作用。 - poorva我通过清理我的资产缓存来解决了这个问题:
$ rake assets:clean
检查/public目录中是否存在页面的静态版本,如果存在则删除。Rails 3.x缓存页面时会在public文件夹中留下静态版本,并在用户访问网站时加载。即使您清除了缓存,这些静态页面仍然存在。
/tmp/cache/
目录。 - Ivan ChauRails.cache.delete_matched("*")
关于 Redis:
Redis.new.keys.each{ |key| Rails.cache.delete(key) }
如果您正在进行片段缓存,则可以通过更新缓存键来手动打破缓存,如下所示:
<% cache ['cool_name_for_cache_key', 'v1'] do %>
<% cache ['cool_name_for_cache_key', 'v2'] do %>
或者您可以根据非静态对象的状态(例如ActiveRecord对象)自动重置缓存,方法如下:
<% cache @user_object do %>
updated_at
被修改时,AR 对象将不再匹配缓存键,这将导致片段被重新缓存。 - jeffdill2