Rails图像和资产未正确加载

例如,在我的Rails应用程序中,我有类似的东西:

.wax_seal { background: url("wax-seal-small.png"); display: block; height: 100px; margin: 0 auto; width: 92px; } .wax_seal:active { background: url('wax-seal-small-broken.png'); } 

在我的config/environments/production.rb文件中:

 # Disable Rails's static asset server (Apache or nginx will already do this). config.serve_static_assets = true 

我手动调用资产的编译:

 bundle exec rake assets:precompile 

并且在名称末尾使用哈希创建文件:

 wax-seal-small-Uuhqwduhqwdoi234983jewf.png 

所以这不起作用:

 background: url("wax-seal-small.png"); 

但这很好(当我在Chrome中手动输入时):

 background: url("wax-seal-small-Uuhqwduhqwdoi234983jewf.png"); 

我在这里错过了什么一步? 如何让我的CSS规则添加到那个小哈希?

config/environments/production.rb添加config.assets.compile = true可以使它工作,但我在Rails指南中读到,由于显着的性能命中,这是一个不好的做法。

我在edgerails文档中找到了这个: http ://edgeguides.rubyonrails.org/asset_pipeline.html#css-and-sass

2.3.2 CSS和Sass

使用资产管道时,必须重写资源路径,并且sass-rails为以下资产类提供-url和-path帮助程序(在Sass中用连字符表示,在Ruby中加以强调):图像,字体,video,音频,JavaScript和样式表。

  • image-url("rails.png") becomes url(/assets/rails.png)
  • image-path("rails.png") becomes "/assets/rails.png"

也可以使用更通用的表单,但必须同时指定资产路径和类:

  • asset-url("rails.png", image) becomes url(/assets/rails.png)
  • asset-path("rails.png", image) becomes "/assets/rails.png"

如果你使用sass或更少,你可以使用background: image-url("wax-seal-small.png");

这将预先添加文件的路径并附加缓存区块哈希。

否则只需将它引用到/ assets目录。 例如background: url("/assets/wax-seal-small.png");