= require_tree . # この行を削除
それぞれのrequire_treeを削除したことでControllerに属するJS/CSSファイルが結合対象外となったため、レイアウトで読みこむように指定します。
ファイル:app/views/layouts/application.html.erb
<%= stylesheet_link_tag params[:controller], :media => "all" %>
<%= javascript_include_tag params[:controller] %>
開発環境だとこのままで動きますが、本番環境だと*.coffeeと*.scssのファイルがコンパイルされないので、設定ファイルにそれぞれのファイルをコンパイルするように追記します。
ファイル:config/environments/production.rb
...# *.coffeeと*.scssをprecompile対象に追加
require "find"js_path = File.join(Rails.root, "app/assets/javascripts/")
Find.find(js_path).each do |f|
if f.match(/^(.*)\.coffee$/)
config.assets.precompile << $1.sub(js_path, "")
end
endcss_path = File.join(Rails.root, "app/assets/stylesheets/")
Find.find(css_path).each do |f|
if f.match(/^(.*)\.scss$/)
config.assets.precompile << $1.sub(css_path, "")
end
end
確認
本番環境ではコンパイルしてからサーバを開始します。
$ rake assets:precompile RAILS_ENV=production
$ rails s -e production
注意点として、本番環境のデフォルトでは静的ファイルのルーティングはされない設定になっているため、フロントにHTTPサーバがない場合は設定ファイルを変更する必要があります。
ファイル:config/environments/production.rb
config.serve_static_assets = true # trueに変更
これでControllerごとのJS/CSSファイルを分離することができました。