【问题标题】:Caching css/js files while using the asset pipeline使用资产管道时缓存 css/js 文件
【发布时间】:2013-09-19 20:13:11
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: javascript ruby-on-rails asset-pipeline


    【解决方案1】:

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

    4.1.1 远期过期标头

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

    对于 Apache:

    # 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>
    

    【讨论】:

      猜你喜欢
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 2011-12-30
      • 2012-02-10
      • 2013-04-01
      • 2011-10-04
      • 1970-01-01
      相关资源
      最近更新 更多