清除Rails应用程序中的布局缓存



我的application.html.slim模板在概念上如下所示:

/ some stuff
= header()
/ more stuff
= yield
/ more stuff
= footer()

现在header()footer()是从外部源加载的,并且它们是特定于语言的。

我引入了一种语言更改机制(基于URL),因此一旦语言更改,就会从不同的源加载headerfooter

我的问题:

  • 我启动服务器
  • 我加载http://myserver.dev/en
  • 内容和标题以英文显示-->确定
  • 我加载http://myserver.dev/de
  • 现在标题仍然是英语,而内容是德语-->不正常
  • 现在,在我重新启动服务器之前,页眉和页脚不会更改

那么,我如何清除布局缓存,以便重新加载footerheader呢。

我尝试了以下操作(但没有成功):

  • 手动从磁盘中删除缓存文件(它们似乎仍在内存中)
  • 在我的application.rb 中添加以下设置

    config.action_view.cache_template_loading = false
    config.action_controller.perform_caching = false
    
  • 每个请求中调用Rails.cache.clear
  • 正在尝试使单个分部过期:expire_fragment('external/_header.html.slim')expire_fragment(%r{external})

我使用片段缓存并为每种语言创建块缓存来避免这种情况。

在定义块的视图中,您将使用更改语言

<% cache("block_1_#{I18n.locale}") do %>
  ...
<% end %>

多亏@gabrimac的帖子,我解决了这个问题:

因此,当我在视图中定义一个特殊的缓存密钥时,如下所示:

- cache("language_dependant_partial") do 
  = ApplicationHelper::footer()

然后我可以使用这个特定的标识符使缓存无效:

before_filter :clear_cache
def clear_cache
  # TODO: This currently clear's the cache on every request
  expire_fragment('language_dependant_partial')
end

最新更新