Rails 4 使用 cache_digests ( https://github.com/rails/cache_digests ) 来帮助片段缓存失效:cache_digests 创建模板及其所有已知依赖项的 MD5 哈希,允许片段缓存通过在模板或其依赖项更改时分配新键而失效。
我的问题是:片段缓存是否会包装 stylesheet_link_tag
如果 application.css 文件的 MD5 哈希值在 rake assets:precompile
期间发生更改,则无效?现在在我们的标题中执行此操作:
<% cache("header-cache-key") do %>
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application" %>
<% end %>
这安全吗?我担心的是,当 CSS 或 JS 发生变化时,
application-xxxxxxx.css
会变成application-yyyyyyy.css
,但我们的 header 将与旧的 application-xxxxxxx.css
一起缓存.那么如果 application-xxxxxxx.css
从 public/assets
消失了,这将导致一个丑陋的页面。
最佳答案
不,缓存不会在更改已编译的 CSS/JS 时被破坏/无效。
Rails 在代码更改时破坏缓存的方式是通过将文件的哈希插入 View 的缓存键来完成的。
例如,假设您在 app/views/layouts/application.html.erb
处有一个 View 文件. Rails 从文件的内容(即 HTML/Ruby 代码,而不是执行的输出)生成一个哈希值。让我们假设生成的哈希是“abdefg123”。
如 application.html.erb
具有以下缓存代码:
<% cache("header-cache-key") do %>
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application" %>
<% end %>
生成的实际缓存键类似于
"views/layouts/application-abcdefg123/header-cache-key"
.由于已编译的 CSS/JS 中的更改实际上并未更改文件中的 Ruby/HTML,因此布局代码的计算哈希值不会更改,因此“header-cache-key”的缓存键是相同的,这意味着缓存没有被破坏。
关于ruby-on-rails - 使用 stylesheet_link_tag 缓存 Rails 4 片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26748866/