在开发模式下使用Rails资产管道无法正确解析图像

时间:2013-05-10 19:51:03

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

TL; DR asset_data_uri有效但asset_path没有。

我最近从一个本土的+ jammit资产管道切换到了Rails资产管道,希望我可以放弃一堆代码,并为我提供最重要的一切。我生产中的一切都很好(与stackoverflow上的大多数人不同),但是,在开发模式下,图像不会显示。

我注意到了一些事情。

  • 为了让图像正确显示,我必须在开发模式中预编译,以便通过css正确引用它们。不幸的是,在开发模式下预编译也会预编译javascript。
  • 在开发模式下进行预编译时,使用asset_data_uri()请求的app / assets / images中的图像显示正常。但是,使用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)
  • 使用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" %>);
}

0 个答案:

没有答案