koukiblog

たぶんweb系の話題

Asset PipelineのPreCompile対象とその設定

いつも忘れては調べて思い出して。。を繰り返していたのでいいかげん覚えようと思ってメモっておく

  • precompile対象のファイル

デフォルトでは
JS:
app/assets/application.js
CSS:
app/assets/application.css
となっている。

つまり、デフォルトの設定は、アプリケーションでjs,css共に1ファイルになるべきという考え方になっていて
どの画面でもコンパイル後のapplication.js,application.cssで動くようにしないといけない。
( // require_tree . がついてるので、コントローラー毎のJSを1ファイルに結合して使用する形になる)

気をつけないといけないのが、特定の画面で、特定のJSだけを読み込もうとして

 <%= javascript_include_tag params[:controller] %>  

みたいに書いていた場合、
production環境で実行すると、下記のようなエラーが発生して、レンダリングすら行われない

ActionView::Template::Error (XXXXXXX.js isn't precompiled):
    40:     <!-- Javascripts
    41:     ================================================== -->
    42:     <!-- Placed at the end of the document so the pages load faster -->
    43:     <%= javascript_include_tag params[:controller] %>
    44:   </body>
    45: </html>

前述の通り、コンパイルされるのは、application.jsだけなので、production環境では、ファイルが見つからずエラーになる。

  • precompile対象の設定

設定を追加することで、precompile対象を追加することができる
/config/enviroments/production.rb内の

config.assets.precompile 

に追加でおk。

基本的には、JSは1ファイルにまとめても動くように作って、必要に応じて追加するのがよいのかな。
管理画面用のJSは別で切り出すとかありそうだし。