La mia soluzione è escludere application.js .css e qualsiasi altra risorsa correlata all'applicazione dalla pre-compilazione. In modo che io possa utilizzare rake assets:precompile
una volta per precompilare solo le risorse relative al motore.
Poi su ogni implementare Io uso un semplice task rake per costruire qualsiasi attività relative applicazioni e unirle in manifest.yml
:
namespace :assets do
task :precompile_application_only => :environment do
require 'sprockets'
# workaround used also by native assets:precompile:all to load sprockets hooks
_ = ActionView::Base
# ==============================================
# = Read configuration from Rails/assets.yml =
# ==============================================
env = Rails.application.assets
target = File.join(::Rails.public_path, Rails.application.config.assets.prefix)
assets = YAML.load_file(Rails.root.join('config', 'assets.yml'))
manifest_path = Rails.root.join(target, 'manifest.yml')
digest = !!Rails.application.config.assets.digest
manifest = digest
# =======================
# = Old manifest backup =
# =======================
manifest_old = File.exists?(manifest_path) ? YAML.load_file(manifest_path) : {}
# ==================
# = Compile assets =
# ==================
compiler = Sprockets::StaticCompiler.new(env,
target,
assets,
:digest => digest,
:manifest => manifest)
compiler.compile
# ===================================
# = Merge new manifest into old one =
# ===================================
manifest_new = File.exists?(manifest_path) ? YAML.load_file(manifest_path) : {}
File.open(manifest_path, 'w') do |out|
YAML.dump(manifest_old.merge(manifest_new), out)
end
end
end
Per specificare quali risorse compilare io uso un file di configurazione YAML (config/assets.yml
):
es.
---
- site/site.css
- admin/admin.css
- site/site.js
- admin/admin.js
è possibile precompilare le risorse prima della distribuzione –
Giusto, ci ho pensato. Ma non so come distribuirò facilmente le risorse precompilate alla produzione. Sto usando capistrano e ogni volta che impegnerà le risorse precompilate per git. La mia preoccupazione è che il repository git crescerà rapidamente in questo caso, mantenendo la cronologia di tutte le risorse precedenti. E questo non è solo css/js - ma anche tutte le immagini degli asset. – Evgenii
Anche per me è estremamente lento (135.987 ms = ~ 2 minuti). Dovrò esaminare la pre-compilazione prima della distribuzione ... Sono preoccupato di aggiungerli anche a git, soprattutto perché ciò aggiungerebbe molto rumore ai log git. Consiglierei di non aggiungerli a git: basta rsync quella directory da localhost al server web come parte dello script di distribuzione cap. –