Rails 3.1 asset precompilation - include all javascript files
I want Rails 3.1 to pick up more of my assets for precompilation. In particular, the default matcher for compiling files doesn't add .js
files from vendor/assets/javascripts
. I can just add the assets to the config.assets.precompile
list, but this seems annoying. I don't want to refer to them in the application.js
manifest, because I don't want them included in all pages.
In summary, any way to request that all .js
files found in vendor/assets/javascripts
get precompiled by rake assets:precompile
, but without having them included in all pages?
Solution 1:
config.assets.precompile
accepts regular expressions and wildcard matching - so to ensure all js files get compiled, without specifying each by name, something like this should do the trick:
config.assets.precompile << '*.js'
Solution 2:
I modified example given in Rails config.assets.precompile setting to process all CSS and JS files in app/assets and here is my version, which takes all assets from /app and /vendor except partials (starting from _)
config.assets.precompile << Proc.new { |path|
if path =~ /\.(css|js)\z/
full_path = Rails.application.assets.resolve(path).to_path
app_assets_path = Rails.root.join('app', 'assets').to_path
vendor_assets_path = Rails.root.join('vendor', 'assets').to_path
if ((full_path.starts_with? app_assets_path) || (full_path.starts_with? vendor_assets_path)) && (!path.starts_with? '_')
puts "\t" + full_path.slice(Rails.root.to_path.size..-1)
true
else
false
end
else
false
end
}