カテゴリー:
Rails
タグ:
 Rails assets

このエントリーをはてなブックマークに追加
更新日時:
2016年11月05日(土)
作成日時:
2016年11月05日(土)

前の記事 / 次の記事

基本的には Rails.root.join("app", "assets", "fonts") に突っ込んでおけばいい。
しかしこのままだとアセットパイプラインの関係で動かない、というか動かなかったのでメモ。

環境:
Rails 5.0.0.1
Ruby 2.3.1p112

前は何もしなくても動いた気がするんだけど、
まあRailsなので少し前に動いたものが動かなくても普通。

考えるべき課題は2つ

  1. どこに格納するのか
  2. ダイジェスト問題の解決

1.どこに格納するのか

基本 assets 配下ならどこでもいいのだけど、
新たにフォント用にfontsディレクトリをつくる場合はassets.rbに設定が必要。

/config/initializers/assets.rb
Rails.application.config.assets_path << Rails.root.join('app', 'assets', 'fonts')

この設定を書かなくてもassets配下に配置されたフォントは自動的にプリコンパイルされるんだけど、
次のダイジェスト問題の解決ができなくなるので追加しておく。

2.ダイジェスト問題の解決

Railsではプリコンパイルされたアセットには、
キャッシュ飛ばし対策として漏れなくダイジェストが付与される。

なので何らかの方法でダイジェストを付与してやらないと
そんなファイルねーよと言われてフォントを読み込めないので頑張る。

方法としてはcss中のフォントを指定してるヶ所のurlをfont-urlと記述することで
後は自動的にRailsがダイジェストを付与してくれる。

この時、新しくディレクトリを切っている場合は、
前述のassets.rbで対象に指定されていないとダイジェストが付与されないので気を付ける。

次みたいなのを

@font-face {
  font-family: 'Original Font';
  src: url("../fonts/original-font.eot");
}

次のようにする

@font-face {
  font-family: 'Original Font';
  src: font-url("original-font.eot");
}

フォントのパスはfont-urlを使った場合、
Railsが知っているので特に意識しなくていい。

他にもフォントのurlを指定しているヶ所はfont-urlに書き換える。