TL;DR asset_data_uri
は機能しますが、asset_path
機能しません。
私は最近、自作の + jammit アセット パイプラインから Rails アセット パイプラインに切り替えました。これは、大量のコードを捨てて、ほとんどすべてを自分で処理できるようにするためです。私は本番環境ですべて正常に動作しています (stackoverflow のほとんどの人とは異なります) が、開発モードでは画像が表示されません。
いくつか気づいたことがあります。
- 画像を正しく表示するには、css 経由で正しく参照できるように、開発モードでプリコンパイルする必要があります。残念ながら、dev モードでプリコンパイルすると、JavaScript もプリコンパイルされます。
- dev モードでプリコンパイルしていない場合、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) に存在する画像がないためです。 - を使用してプリコンパイルする
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" %>);
}