使用资产管道时缓存 css/js 文件



我有一个将从移动设备大量访问的rails应用程序,所以我正在研究在设备上积极缓存资产。 我遇到的一件事是在启用资产管道的情况下使用缓存的问题。

如果我在stylesheet_link_tag上将 :cache 选项设置为 true,则会遇到服务器找不到包含 *=require_tree . 的文件.css文件的问题。 指令加载我所有的 CSS 文件。

No such file or directory - Asset file not found at '.../public/stylesheets/application.css'

正在研究这个问题,我看到很多东西说如果你有兴趣缓存你的css/js文件,你应该提供静态资产而不是使用资产管道。 这很好,但我听说了很多关于资产管道有多棒的消息,我喜欢它提供的缩小方面。

我的

问题是:有没有办法利用资产管道的缩小方面,同时还要让浏览器缓存我的 css/js 文件?

是的。你不应该在你的 js 和 css 标签声明中使用 cache: true。在生产模式下,您应该预编译资产,这些资产将由您的 Web 服务器提供服务。编译的资产最终会有指纹,所以将来如果你更新资产,它的指纹会改变,因此文件名会改变,你可以保证浏览器会得到新文件,因此你可以配置你的网络服务器对资产使用积极的缓存方法。请阅读资产的 rails 指南,以准确了解资产的工作原理。如果向下滚动到 4.1.1 部分,您将看到以下文本:

4.1.1 远未来过期标头

预编译资产存在于文件系统上,由 您的网络服务器。默认情况下,它们没有遥远未来的标头,因此 获得指纹识别的好处,您必须更新服务器 配置以添加它们。

对于阿帕奇:

# The Expires* directives requires the Apache module `mod_expires` to be enabled.
<Location /assets/>
  # Use of ETag is discouraged when Last-Modified is present
  Header unset ETag
  FileETag None
  # RFC says only cache for 1 year
  ExpiresActive On
  ExpiresDefault "access plus 1 year"
</Location>

最新更新