2

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)
  • 预编译 usingrake 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" %>);
}
4

0 回答 0