我正在开发Rails 3.1应用程序。我创建了一个application.css.scss.erb
文件。 .erb到底是因为我想从配置文件中加载一个变量作为css中的颜色变量:
$highlight1: #<%= COLOR.highlight1 %>;
$highlight2: #<%= COLOR.highlight2 %>;
一切正常,但我遇到的问题是每当我更改COLOR.highlight1中的值时,它都不会反映更改,直到我进入我的css文件并更改某些内容(我通常添加一些空格和保存)。那是我看到变化的时候。显然,rails正在查看文件是否已更改以更新更改。
有没有办法,至少在开发过程中,这可以关闭,我可以看到更改,而不必修改css文件?
对我的技术的任何批评/意见也欢迎
答案 0 :(得分:7)
Sprockets depend_on
指令用于声明这些类型的依赖项。因此,在css.scss.erb文件的顶部,使用其他指令(require和friends),输入如下内容:
//= depend_on "/path/to/colors.rb"
然后,当文件/path/to/colors.rb
发生变化时,它将强制css更新。
不幸的是,我从来没有使用相对路径来处理其中一个资产目录(javascripts / stylesheets / images)的文件 ,因此Sprockets可能会解决这个问题阻止这种情况的路径,否则我会遗漏一些东西。这使您可以选择指定绝对路径,这几乎肯定不适用于所有应用程序环境,或者将常量文件放入资产目录(例如app / assets / stylesheets / colors.rb)。 / p>
供参考,这里是Sprockets(2.0.3)源代码中depend_on
指令的文档,位于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"
#
如果有人知道指定其他地方(如配置/初始化程序或其他地方)的相对路径,请告诉我们!
答案 1 :(得分:3)
除了David Faber的回答。我也需要使用相对路径。
我想生成一个带有语言环境字典的js文件,如果语言环境文件被更改,它将更新:
//= depend_on "../../../config/locales/en.yml"
//= depend_on "../../../config/locales/ja.yml"
var locales = <%= locales.to_json %>;
事实证明,当相对路径也在资产路径中时,当前(Rails 3.2.3)相对路径才有效!
所以丑陋的解决方案是在config/application.rb
中添加路径:
config.assets.paths.unshift Rails.root.join("config", "locales").to_s
答案 2 :(得分:0)
也许试试:
config.assets.digest = true
在您的开发配置文件
中答案 3 :(得分:0)
http://guides.rubyonrails.org/configuring.html
- config.assets.compile是一个布尔值,可用于在生产中打开实时Sprockets编译。
可能想尝试一下,我不确定它是否实时编译,至少它应该禁用缓存。
答案 4 :(得分:0)
我试试这个,它有用吗
在application.rb
中config.autoload_paths += %W(#{config.root}/lib/assets_variables)
config.assets.paths << File.join(Rails.root, 'lib', 'assets_variables')
在lib / assets_variables / color.rb
中module Color
def self.default
'blue'
end
end
app / assets / stylesheets / color.css.scss.erb 中的
//= depend_on "color.rb"
$default_color: <%= Color::default %>;
.content {
color: $default_color;
}