いつも忘れては調べて思い出して。。を繰り返していたのでいいかげん覚えようと思ってメモっておく
- 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は別で切り出すとかありそうだし。