0

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

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

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

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

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

4

1 回答 1

1

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

4.1.1远期过期标头

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

对于阿帕奇:

# 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>
于 2013-09-19T20:44:24.950 回答