我的application.html.slim
模板在概念上如下所示:
/ some stuff
= header()
/ more stuff
= yield
/ more stuff
= footer()
现在header()
和footer()
是从外部源加载的,并且它们是特定于语言的。
我引入了一种语言更改机制(基于URL),因此一旦语言更改,就会从不同的源加载header
和footer
。
我的问题:
- 我启动服务器
- 我加载
http://myserver.dev/en
- 内容和标题以英文显示-->确定
- 我加载
http://myserver.dev/de
- 现在标题仍然是英语,而内容是德语-->不正常
- 现在,在我重新启动服务器之前,页眉和页脚不会更改
那么,我如何清除布局缓存,以便重新加载footer
和header
呢。
我尝试了以下操作(但没有成功):
- 手动从磁盘中删除缓存文件(它们似乎仍在内存中)
在我的
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