基本的に、Rails のアセット パイプライン プリコンパイル機能を使用する際の落とし穴の 1 つを経験しています。これにより、画像やその他のメディアにハッシュが与えられます。これらのアセットの参照は、対応するために動的でなければなりません
問題は、アセットをプリコンパイルするときに、.css ファイル内の静的リンクが .css のみを指すことurl(/assets/image.png)
です。ただし、本当に必要なのは、asset_path
またはasset_url
ヘルパーを使用して、そのリンクを動的にレンダリングすることです。
解決策はSCSSです
私たちはこの問題を抱えていました ( asset sync
gem を使用しています)。これを解決する最善の方法は、アセット パスを動的にレンダリングする SCSS であることがわかりました。コードの一部を次に示します。
#app/assets/stylesheets/application.css.scss (yes, you should change it)
@import 'layout/fonts';
#app/assets/stylesheets/layout/fonnts.css.scss
@font-face {
font-family: 'akagi';
src: asset_url('fonts/akagi-th-webfont.eot');
src: asset_url('fonts/akagi-th-webfont.eot?#iefix') format('embedded-opentype'),
asset_url('fonts/akagi-th-webfont.woff') format('woff'),
asset_url('fonts/akagi-th-webfont.ttf') format('truetype'),
asset_url('fonts/akagi-th-webfont.svg#akagithin') format('svg');
font-weight: 300;
font-style: normal;
}
の使用方法を参照してくださいasset_url
。
これにより、rake は古いパスではなく、コンパイル時にアセットへの新しいパスを定義することができます。つまり、実行すると、rake assets:precompile
すべての正しい参照が取得されます。
アセットをコンパイルするときはいつでも、次のプリコンパイル プロセスを使用することをお勧めします。
rake assets:precompile RAILS_ENV=production
... Heroku にアップロードすると、次のようになります。
heroku run rake assets:precompile --app [your app]