Qualcuno sa esattamente come viene calcolato il valore del digest di asset? Se ho due file JS che contengono vari altri script JS inclusi, ciascun file manterrà lo stesso hash digest se nessuno degli script interni è stato modificato? O è un nuovo valore di digest calcolato ogni volta che viene eseguito l'asset: viene eseguita l'operazione di precompilazione?Pipeline di asset Rails e valori digest
risposta
afferrò da rails guides
Quando un nome è unico e in base al suo contenuto, le intestazioni HTTP possono essere impostate per incoraggiare le cache ovunque (sia a CDN, a fornitori di servizi Internet, in apparecchiature di rete, o in web browser) per mantenere la propria copia di del contenuto. Quando il contenuto viene aggiornato, l'impronta digitale cambia. In questo modo i client remoti potranno richiedere una nuova copia del contenuto di . Questo è generalmente noto come busting della cache.
La tecnica che Rails utilizza per il rilevamento delle impronte digitali consiste nell'inserire un hash del contenuto nel nome, solitamente alla fine. Per esempio un file CSS global.css potrebbe essere rinominato con un MD5 digest del suo contenuto
La risposta accettata non è del tutto vero. Costruiamo risorse statiche per i nostri server di staging, demo e produzione, e lo stesso asset viene fornito con valori di digest diversi in ciascun caso.
Si scopre che anche l'ambiente Rails viene preso in considerazione. Pignoni crea il digest come segue:
# Sprockets::Environment::initialize
@digest_class = ::Digest::MD5
# Sprockets::Base::digest
@digest ||= digest_class.new.update(VERSION).update(version.to_s)
# Sprockets::Base::file_digest(path)
digest.file(path.to_s)
# Sprockets::Asset::initialize
@digest = environment.file_digest(pathname).hexdigest
Rails uncini nelle ruote dentate come segue:
# Sprockets::Railtie
app.assets = Sprockets::Environment.new(app.root.to_s) do |env|
env.version = ::Rails.env + "-#{config.assets.version}"
...
end
Così Rails è la creazione di un ambiente di ruote dentate che ha una versione uguale per l'ambiente Rails, e Pignoni utilizza la versione quando si crea la classe digest.
Quindi una semplice operazione md5_file() eseguita sul file finale dopo l'unione e la compressione viene eseguita? Quel valore md5 finisce per essere il digest per il file corretto? – matsko
Secondo i documenti, sì. Puoi fare riferimento a [un'altra guida] (http://guides.rubyonrails.org/asset_pipeline.html#in-production) per maggiori dettagli. – Tomato