Je veux que Rails 3.1 récupère plus de mes actifs pour la précompilation. En particulier, le matcher par défaut pour la compilation des fichiers n'ajoute pas .js
fichiers de vendor/assets/javascripts
. Je peux simplement ajouter les actifs au config.assets.precompile
liste, mais cela semble ennuyeux. Je ne veux pas y faire référence dans le application.js
manifeste, car je ne veux pas qu'ils soient inclus dans toutes les pages.
En résumé, toute façon de demander à tous les .js
fichiers trouvés dans vendor/assets/javascripts
être précompilé par rake assets:precompile
, mais sans les inclure dans toutes les pages?
config.assets.precompile
accepte les expressions régulières et les correspondances génériques - afin de garantir que les fichiers tous js sont compilés, sans spécifier chacun par leur nom, quelque chose comme ceci devrait faire l'affaire:
config.assets.precompile << '*.js'
J'ai modifié l'exemple donné dans paramètre Rails config.assets.precompile pour traiter tous les fichiers CSS et JS dans app/assets et voici ma version, qui prend tous les actifs de/app et/vendor sauf les partiels (à partir de de _)
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
}
# Precompile *all* assets, except those that start with underscore
config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/
Référencez les 55 minutes Blog pour l'explication complète.
Cela précompilera tous les actifs, pas seulement JavaScript (.js, .coffee, .swf, .css, .scss)