TL;DR asset_data_uri
有效但asset_path
无效。
我最近从本土 + jammit 资产管道切换到 Rails 资产管道,希望我可以放弃一堆代码并为我处理大部分事情。我在生产中一切正常(不像大多数人在stackoverflow上),但是,在开发模式下,图像不会出现。
我注意到了一些事情。
- 为了让图像正确显示,我必须在开发模式下预编译,以便可以通过 css 正确引用它们。不幸的是,在开发模式下预编译也会预编译 javascript。
- 当不在开发模式下预编译时,位于 app/assets/images 中的图像使用请求
asset_data_uri()
显示正常。但是,相同的图像使用asset_path()
不。例如,在我的 initialize.css.erb 文件中,<%= asset_data_uri "cork.bg.gif" %>
显示正常,但<%= asset_path "cork.bg.gif" %>
没有。这是因为 Rails 将路径解析为 /assets/cork.bg.gif,并且该位置没有图像(即 public/assets/cork.bg.gif) - 预编译 using
rake assets:precompile RAILS_ENV=development
让我的图像在正确的位置,因此它们可以从公共/资产中提供,但它也扼杀了开发,因为现在对 JS 文件的更改被缓存,直到我再次预编译。
那么我能做什么呢?下面是相关配置。如果还有什么我可以提供的,请告诉我:
在 application.rb 中:
config.assets.enabled = true
config.assets.version = '1.0'
在 development.rb 中:
config.assets.compile = true
config.assets.compress = false
config.assets.debug = true
注意:我读过很多关于config.serve_static_assets
参与的文章。它目前在 development.rb 中被注释掉,所以它是 Rails 3.2.13 上的默认版本。
一个例子:initialize.css.erb
我的图像位于 app/assets/images 中。我使用的示例图像位于 app/assets/images/cork.bg.gif。
作品:
body {
background-image: url(<%= asset_data_uri "cork.bg.gif" %>);
}
不起作用:
body {
background-image: url(<%= asset_path "cork.bg.gif" %>);
}