LoginSignup
58
53

More than 5 years have passed since last update.

Rails4 でフォントの precompile に関する問題の解決策

Last updated at Posted at 2014-07-02

Rails4 で twitter bootstrap を使うときなどに、prooduction 環境だと絵文字が"トウフ"なのだわーウフフという悲しみ、あります。

主に以下の2つが問題のようでした。

  • vendor 以下のフォントファイルが rake assets:precompilepublic/assets にコピーされない
  • rake assets:precompile でコピーされたフォントファイル名に digest が付与されてしまい、CSS から読み込めていない

解決策

assets:precompile でなんとかする場合は以下の手順でOKでした。
(自前でフォントを public/assets にコピーという対応方法もある)

1. フォントを precompile 対象に含める

まずは次のどちらかの方法でフォントファイルを precompile 対象にしてやる。

  • フォントファイルを app/assets/fonts に配置
  • フォントファイルを vendor/assets/fonts に配置 & precompile 対象に含める設定を追加
config/initializers/assets.rb
# 以下を追加
Rails.application.config.assets.precompile += %w( *.svg *.eot *.woff *.ttf )

2. フォントファイル名に付与される digest をなんとかする

次のどちらかの方法で digest をなんとかする。

  • CSS側でなんとかする: sass/scss に変更して url(...)font-url(...) に変更
    • sass にした時点でインデントとかもろもろ修正しないといけない、つらい。。。
    • css.erb にして url(<%= asset_path("...") %>) の方が楽?
  • フォントファイル名をなんとかする: non-stupid-digest-assets を利用する
config/initializers/non_digest_assets.rb
NonStupidDigestAssets.whitelist = [/glyphicons-halflings-regular\.(eot|svg|woff|ttf)/]

なんか不足あれば教えてくださいませ。。。
あと、map ファイルとかも同様の方法で参照を解決してやると多少幸せになれるかも。

原因

  1. Rails4 で vendor 下が js/css 以外の precompile 対象外になったらしい ( https://github.com/rails/rails/pull/7968
  2. Rails4 では precompile したファイル名に必ず digest が付与されてしまう

Rails4 というか正確には sprockets-rails なのかな。
2については Issue が大変なありさまに。。。

sprockets-rails では自前 rake task でなんとかしろ、って言ってるんだけど、、、どうなのそれ。。。

参考

58
53
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
58
53