読者です 読者をやめる 読者になる 読者になる

= 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
end

css_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ファイルを分離することができました。