Questo compito è reso più difficile dal fatto che le ruote dentate funziona con percorsi logici che non lo fanno includere dove si trova il sottostante, non compilato risorse.
Supponiamo che il mio progetto abbia il file JS "/app/assets/javascripts/foo/bar.js.coffee".
Il compilatore per prima cosa determina l'estensione del file di output, in questo caso ".js", quindi valuta se compilare o meno il percorso logico "foo/bar.js". La risorsa non compilata potrebbe essere in "app/assets/javascripts", "vendor/assets/javascripts", "lib/assets/javascripts" o una gemma, quindi non c'è modo di includere/escludere un particolare file basato sul percorso logico solo.
Per determinare dove si trova la risorsa sottostante, credo sia necessario chiedere all'ambiente di trascinamento (disponibile tramite l'oggetto Rails.application.assets) per risolvere il percorso reale della risorsa dato il percorso logico.
Ecco la soluzione che sto utilizzando. Sono abbastanza nuovo a Ruby, quindi questo non è il codice più elegante:
# In production.rb
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
if full_path.starts_with? app_assets_path
puts "including asset: " + full_path
true
else
puts "excluding asset: " + full_path
false
end
else
false
end
}
Con ruote dentate> 3.0, questo non funzionerà in produzione, perché Rails.application.assets sarà nullo (supponendo di default: config .assets.compile = false).
Per soluzione alternativa si sostituisce la percorso_completo incarico con:
@assets ||= Rails.application.assets || Sprockets::Railtie.build_environment(Rails.application)
full_path = @assets.resolve(path)
Vedi anche: https://github.com/rails/sprockets-rails/issues/237
possibile duplicato di [Come utilizzare config.assets.precompile per le directory anziché singoli file?] (Http://stackoverflow.com/questions/12613980/how-do-i-use-config-assets-precompile -per-directories-piuttosto-than-files) – Jason