私の Scss ファイルには、次のようにいくつかのフォントが設定されています。
@font-face {
font-family: 'Icomoon';
src: asset-url('icoMoon.eot?#iefix', font) format('embedded-opentype'),
asset-url('icoMoon.woff', font) format('woff'),
asset-url('icoMoon.ttf', font) format('truetype'),
asset-url('icoMoon.svg#Icomoon', font) format('svg');
}
実際のフォントファイルは/app/assets/fonts/に保存されます。
config.assets.paths << Rails.root.join("app", "assets", "fonts")
application.rbファイルに追加しました
コンパイルされた CSS ソースは次のようになります。
@font-face {
font-family: 'Icomoon';
src: url(/assets/icoMoon.eot?#iefix) format("embedded-opentype"), url(/assets/icoMoon.woff) format("woff"), url(/assets/icoMoon.ttf) format("truetype"), url(/assets/icoMoon.svg#Icomoon) format("svg");
}
しかし、アプリを実行してもフォント ファイルが見つかりません。ログ:
2012-06-05 23:21:17 +0100 に 127.0.0.1 の GET "/assets/icoMoon.ttf" を開始しました。アセット /icoMoon.ttf が提供されました - 404 見つかりません (13 ミリ秒)
アセット パイプラインはなぜフォント ファイルを /assets だけにフラット化しないのでしょうか?
何かアイデアはありますか?
よろしくお願いいたします、ニール
追加情報:
Rails コンソールでアセット パスと assetprecompile を確認すると、次のようになります。
1.9.2p320 :001 > y Rails.application.config.assets.precompile
---
- !ruby/object:Proc {}
- !ruby/regexp /(?:\/|\\|\A)application\.(css|js)$/
- .svg
- .eot
- .woff
- .ttf
=> nil
1.9.2p320 :002 > y Rails.application.config.assets.paths
---
- /Users/neiltonge/code/neiltonge/app/assets/fonts
- /Users/neiltonge/code/neiltonge/app/assets/images
- /Users/neiltonge/code/neiltonge/app/assets/javascripts
- /Users/neiltonge/code/neiltonge/app/assets/stylesheets
- /Users/neiltonge/code/neiltonge/vendor/assets/images
- /Users/neiltonge/code/neiltonge/vendor/assets/javascripts
- /Users/neiltonge/code/neiltonge/vendor/assets/stylesheets
- /Users/neiltonge/.rvm/gems/ruby-1.9.2-p320@neiltonge/gems/jquery-rails-2.0.0/vendor/assets/javascripts
- /Users/neiltonge/.rvm/gems/ruby-1.9.2-p320@neiltonge/gems/coffee-rails-3.2.1/lib/assets/javascripts
- /Users/neiltonge/.rvm/gems/ruby-1.9.2-p320@neiltonge/gems/bourbon-1.3.0/app/assets/stylesheets
- !ruby/object:Pathname
path: /Users/neiltonge/code/neiltonge/app/assets/fonts
=> nil
ベストアンサー1
Rails のバージョンが ~ の場合
> 3.1.0
、< 4
フォントを次のいずれかのフォルダに配置します。app/assets/fonts
lib/assets/fonts
vendor/assets/fonts
Rails バージョンの場合は
> 4
、フォントをフォルダーに配置する必要がありますapp/assets/fonts
。注:指定されたフォルダーの外部にフォントを配置するには、次の構成を使用します。
config.assets.precompile << /\.(?:svg|eot|woff|ttf)\z/
Rails バージョンの場合
> 4.2
、この設定を に追加することをお勧めしますconfig/initializers/assets.rb
。config/application.rb
ただし、またはに追加することもできます。config/production.rb
CSS ファイルでフォントを宣言します。
@font-face { font-family: 'Icomoon'; src:url('icomoon.eot'); src:url('icomoon.eot?#iefix') format('embedded-opentype'), url('icomoon.svg#icomoon') format('svg'), url('icomoon.woff') format('woff'), url('icomoon.ttf') format('truetype'); font-weight: normal; font-style: normal; }
フォント名が宣言の URL 部分とまったく同じであることを確認してください。大文字と句読点は重要です。この場合、フォントの名前は になります
icomoon
。Rails で Sass または Less を使用している場合
> 3.1.0
(CSS ファイルの拡張子.scss
が またはである場合.less
)、url(...)
フォント宣言の を に変更しますfont-url(...)
。それ以外の場合、CSS ファイルの拡張子は
.css.erb
、フォント宣言は である必要がありますurl('<%= asset_path(...) %>')
。Rails を使用している場合は、の代わりに
> 3.2.1
を使用できます。このヘルパーはまったく同じことを行いますが、より明確です。font_path(...)
asset_path(...)
最後に、部分で宣言したように、CSS でフォントを使用します
font-family
。大文字で宣言されている場合は、次のように使用できます。font-family: 'Icomoon';