【问题标题】:Prevent Rails 4 Sprocket Asset Pipeline from caching a specific file防止 Rails 4 Sprocket Asset Pipeline 缓存特定文件
【发布时间】:2015-01-25 17:11:27
【问题描述】:

我有一个文件globals.css.scss.erb,其中只包含:

<%= Styles.output %>

Styles 是一个自定义模块,用于输出基于 YAML 文件的格式化 SCSS/SASS 全局变量。

我的问题是,当我更改 YAML 文件时,globals.css 没有得到更新(即它被 Sprockets 缓存)。

我想禁用 globals.css 上的缓存,而不是我的所有资产。这可能吗?这只适用于我的开发环境。

谢谢,

埃里克

P.S.,this post 没有解决问题。

【问题讨论】:

  • 也许this question 中的方法可能会提供一些灵感(即使它显然不像rails 4.1那样工作)

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


【解决方案1】:

据我了解,您始终需要重新编译 .erb 资产。这是解决方案:

Sprockets::Asset.class_eval do
  alias_method :orig_dependency_fresh?, :dependency_fresh?
  def dependency_fresh?(environment, dep)
    if dep.pathname.extname.eql? '.erb'
      false
    else
      orig_dependency_fresh?(environment, dep)
    end
  end
end

【讨论】:

  • 谢谢@intale,我会试试这个。添加这个的首选位置在哪里?作为初始化器?
  • 这行得通,我已将您标记为正确。谢谢你。虽然由于我所有的(许多)SCSS 文件都导入了globals.css.scss.erb,但它每次都会重新编译(如预期的那样)......但它太慢了。您是否知道“每个初始请求”一次重新编译该特定文件然后缓存的任何方法?
  • 你把这个放在哪里了? @ErikNomitch 我收到以下错误:'alias_method': undefined method 'dependency_fresh?' for class 'Sprockets::Asset
  • @LalitKapoor 我把它放在lib/styles.rb 并自动加载lib/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
相关资源
最近更新 更多