我有一个RoR应用程序(ruby v1.8.7; rails v2.3.5)在开发环境中缓存页面。这不是什么大问题,但是缓存页面的a
元素不正确。
我没有对development.rb文件进行任何更改,也没有向控制器添加任何缓存命令。
我曾尝试清除该网站(localhost)的浏览器(OSX上的Firefox 3.5)的cookie和页面缓存。我还重新启动了Mongrel。似乎没有任何帮助。
我想念什么?
Answers:
development.rb中的这一行确保不会发生缓存。
config.action_controller.perform_caching = false
您可以使用以下方法清除Rails缓存
Rails.cache.clear
话虽如此-我不相信这是一个缓存问题。您是否正在对该页面进行更改,而没有看到它们的反映?您可能不是在查看该页面的实时版本?我已经做了一次(脸红)。
更新:
您可以从控制台中调用该命令。您确定要在开发中运行该应用程序吗?
唯一的选择是您要呈现的页面不是正在呈现的页面。
如果您观看服务器输出,则在渲染页面时应该可以看到render命令,如下所示:
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
否则我想这是行不通的
在/ public中检查页面的静态版本,如果存在,则将其删除。当Rails 3.x缓存页面时,它将在您的公用文件夹中保留一个静态版本,并在用户访问您的网站时进行加载。即使您清除了缓存,该设置仍将保留。
/tmp/cache/
目录中的项目。
如果您正在执行片段缓存,则可以通过更新缓存键来手动中断缓存,如下所示:
<% cache ['cool_name_for_cache_key', 'v1'] do %>
<% cache ['cool_name_for_cache_key', 'v2'] do %>
或者,您可以根据非静态对象(例如ActiveRecord对象)的状态自动重置缓存,如下所示:
<% cache @user_object do %>
使用此^方法,无论何时更新用户对象,缓存都会自动重置。
updated_at
被修改时,AR对象将不再匹配高速缓存密钥,这将导致重新缓存的片段。
更深奥的方式:
Rails.cache.delete_matched("*")
对于Redis:
Redis.new.keys.each{ |key| Rails.cache.delete(key) }