资产管道缓存CSS?

ali*_*lik 12 css ruby-on-rails sass ruby-on-rails-3.1 asset-pipeline

我正在研究Rails 3.1应用程序.我创建了一个application.css.scss.erb文件..erb到底是因为我想从配置文件中加载一个变量作为css中的颜色变量:

$highlight1: #<%= COLOR.highlight1 %>;
$highlight2: #<%= COLOR.highlight2 %>;
Run Code Online (Sandbox Code Playgroud)

一切正常,但我遇到的问题是每当我更改COLOR.highlight1中的值时,它都不会反映更改,直到我进入我的css文件并更改某些内容(我通常添加一些空格并保存) .那是我看到变化的时候.显然,rails正在查看文件是否已更改以更新更改.

有没有办法,至少在开发过程中,这可以关闭,我可以看到更改,而不必修改css文件?

对我的技术的任何批评/意见也是受欢迎的

Dav*_*ber 7

Sprockets depend_on指令用于声明这些类型的依赖项.因此,在css.scss.erb文件的顶部,使用其他指令(require和friends),输入如下内容:

//= depend_on "/path/to/colors.rb"
Run Code Online (Sandbox Code Playgroud)

然后当文件/path/to/colors.rb更改时,它将强制css也更新.

不幸的是,我从来没有得到这个与一个资产目录(javascripts/stylesheets/images)之外的文件的相对路径,因此Sprockets可能会解决阻止这种情况的路径,否则我就是遗漏了什么.这使您可以选择指定绝对路径,这几乎肯定不适用于所有应用程序环境,或者将常量文件放入资产目录(例如app/assets/stylesheets/colors.rb).

作为参考,这里是depend_onSprockets(2.0.3)源代码中的指令文档,位于sprockets/directive_processor.rb中

  # Allows you to state a dependency on a file without
  # including it.
  #
  # This is used for caching purposes. Any changes made to
  # the dependency file will invalidate the cache of the
  # source file.
  #
  # This is useful if you are using ERB and File.read to pull
  # in contents from another file.
  #
  #     //= depend_on "foo.png"
  #
Run Code Online (Sandbox Code Playgroud)

如果有人知道如何指定其他地方的相对路径,如配置/初始化器或其他东西,请告诉我!


Mat*_*hew 0

也许尝试:

config.assets.digest = true
Run Code Online (Sandbox Code Playgroud)

在您的开发配置文件中