本番環境ではRails 4アプリ)にフォントを読み込めません。開発中は正常に機能します。
アセットは、デプロイ中にサーバー上でプリコンパイルされます。
私は自分のフォントを持っています
app/assets/fonts
私のapp.css:
@font-face {
font-family: 'WalkwayBoldRegular';
src: url('Walkway_Bold-webfont.eot');
src: url('Walkway_Bold-webfont.eot?#iefix') format('embedded-opentype'),
url('Walkway_Bold-webfont.woff') format('woff'),
url('Walkway_Bold-webfont.ttf') format('truetype'),
url('Walkway_Bold-webfont.svg#WalkwayBoldRegular') format('svg');
font-weight: normal;
font-style: normal;
}
私のproduction.rbには次のものがあります。
config.assets.precompile << Proc.new { |path|
if path =~ /\.(eot|svg|ttf|woff)\z/
true
end
}
先週この問題が発生しました。問題は、アセットがコンパイルされてMD5ハッシュが含まれる一方で、標準のCSSが引き続き「標準」の名前を検索することです。これは画像とフォントの問題です。
@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;
}
これは、アセットを動的にロードするために scss ファイルを使用する方法の例です。これらのファイルは(プッシュ前または初期化中に).cssファイルにコンパイルされ、すべてアセットが正しく同期されます。
Herokuでも同様の問題が発生し、ファイルを/stylesheets/layout/fonts.css.scssに配置してから、Herokuを呼び出すことで問題を解決できました。
@import '/layout/fonts';
@import関数をサポートするために、application.css-> application.css.scssも呼び出しました。
これは、ライブラリのこの問題をトラブルシューティングする一般的な方法です。
実行Rails本番サーバー
rake assets:precompile
_これは_config/environments/production.rb
_にあります
_ # Rails 4 production
# config.serve_static_files = true
# Rails 5, Uncomment to run production on local
# config.log_level = :debug
config.public_file_server.enabled = true
_
Rails_ENV=production Rails s
_application.css
_が使用されるため、_application.scss
_の名前を_asset-url
_に変更する必要がありますファイル_config/initializers/assets.rb
_でプリコンパイルするフォントを追加します。
_Rails.application.config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
_
CSSライブラリ内でフォントフェース定義を探し、それを_application.scss
_にコピーします。次のようになります。
_@font-face {
font-family: 'my-library';
src: url('../fonts/my-library.eot');
src:
url('../fonts/my-library.eot?#iefix') format('embedded-opentype'),
url('../fonts/my-library.woff2') format('woff2'),
url('../fonts/my-library.ttf') format('truetype'),
url('../fonts/my-library.woff') format('woff'),
url('../fonts/my-library.svg?#my-library') format('svg');
font-weight: normal;
font-style: normal;
}
_
への変更:
_@font-face {
font-family: 'my-library';
src: asset-url('my-library/fonts/my-library.eot');
src:
asset-url('my-library/fonts/my-library.eot?#iefix') format('embedded-opentype'),
asset-url('my-library/fonts/my-library.woff2') format('woff2'),
asset-url('my-library/fonts/my-library.ttf') format('truetype'),
asset-url('my-library/fonts/my-library.woff') format('woff'),
asset-url('my-library/fonts/my-library.svg?#my-library') format('svg');
font-weight: normal;
font-style: normal;
}
_
url
の代わりに_asset-url
_を使用してください../fonts
_または_asset-url
_が理解できるパスに類似したものを変更します。_asset-url
_が理解できるパスを知るには、Rails consoleに移動し、_Rails.application.assets.paths
_と入力します。次のようになります。
_[
'/path/1',
'/path/2',
'/path/3',
]
_
フォントが_/path/2/my-library/fonts/
_にある場合は、asset-url('my-library/fonts/my-library.eot')
を使用します。
つまり、_Rails.application.assets.paths
_で見つけたその部分のパスを削除します。
オンRails開発中のコンソール:
_helper.asset_url('my-library/fonts/my-library.eot')
_
戻る必要があります:
_"/assets/my-library/fonts/my-library-2517b97e2c0e1e6c8ceb9dd007015f897926bc504154137281eec4c1a9f9bdc9.eot"
_
末尾の_/assets/
_と最後の部分のダイジェストに注意してください。
Railsには、このためのビルド前ヘルパーが付属しています。 url()を使用する代わりにasset-url()を使用する必要があります。
1:-すべてのフォントをapp/assets/fontsフォルダーに保存します。
2:-rake Asset:precompile Rails_ENV = productionの後、すべてのフォントはダイジェストを使用してpublic/assetsフォルダーにプリコンパイルされます。
3:-src:url( 'fontname.eot')を使用する代わりに、scssファイルでsrc:font_url( 'fontname.eot')を使用します。