【问题标题】:Ruby on Rails: Clear a cached pageRuby on Rails:清除缓存页面
【发布时间】:2023-03-03 03:36:01
【问题描述】:

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

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

我已尝试清除浏览器(OSX 上的 Firefox 3.5)cookie 和此站点(本地主机)的页面缓存。我也重新启动了 Mongrel。似乎没有任何帮助。

我错过了什么?

【问题讨论】:

    标签: ruby-on-rails caching


    【解决方案1】:

    更深奥的方法:

    Rails.cache.delete_matched("*")
    

    对于 Redis:

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

    【讨论】:

      【解决方案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 %>
      

      使用这个^方法,任何时候用户对象更新,缓存都会自动重置。

      【讨论】:

      • 如果只针对特定的片段缓存进行更改后自动重置呢?
      • @Astm 这就是您使用最后一个选项的地方——将 AR 对象作为缓存键的一部分。当updated_at被修改时,AR对象将不再匹配缓存key,这会导致fragment被重新缓存。
      • 我找到了一种简单的方法来自动清除缓存如果发生任何更改,使用语法 if there's any change在 user_object 中它会自动更新缓存
      • @Astm 对,这是我提到的最后一个选项,使用 AR 对象作为缓存键的一部分。
      【解决方案3】:

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

      【讨论】:

      • 在 Rails 4 中,缓存位于/tmp/cache/ 目录的项目。
      • 这对我有用。我不断得到一个渲染页面,我用它来测试一些新代码。服务器控制台没有报告我请求的任何会呈现相同文本的新页面。我清除了缓存,认为这是问题所在,但这并没有帮助。我在公用文件夹中找到该页面,将其删除,现在它可以正常工作了。
      【解决方案4】:

      rake tmp:cache:clear 可能就是您要找的。​​p>

      【讨论】:

      • 如果环境不是开发,那么你需要添加(例如登台)-RAILS_ENV=staging bundle exec rake tmp:cache:clear 否则我猜它不会工作
      • 这只会从 tmp/cache 目录中删除文件。它不会清除缓存存储数据。 stackoverflow.com/questions/19017983/…
      【解决方案5】:

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

      $ rake assets:clean
      

      【讨论】:

        【解决方案6】:

        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)
        

        【讨论】:

        • 该行存在于 development.rb 文件中。我在哪里添加该命令?是的。如果页面是“活动的”,我对应该显示的页面进行了更改——这就是我发现缓存问题的方式。
        • 这似乎是我的一个愚蠢的错误。 blush 感谢您的时间和帮助——我确实学到了很多东西。
        • 没问题。很想知道问题是什么 - 这些事情总是很模糊 - 最重要的是当你犯了一个愚蠢的错误时 - 我想我很快就会犯同样的错误:)
        • 我已经为两个相关模型嵌套了路由。在一页上,我使用了 link_to 中的 edit_parent_child_path。不幸的是,我省略了父母的参考;它是edit_parent_child_path(child),它必须是edit_parent_child_path(@parent,child)。
        • “你可能没有看那个页面的实时版本?我做过一次(脸红)。”哈哈,这只是发生在我身上哈哈
        猜你喜欢
        • 1970-01-01
        • 2023-03-18
        • 2011-01-23
        • 1970-01-01
        • 2015-02-14
        • 1970-01-01
        • 2016-06-20
        • 2012-09-24
        • 1970-01-01
        相关资源
        最近更新 更多