Ho un grande corpo di esperienza di lavoro con le applicazioni AppCache sostenuti serviti da una pila Rails .
Ho trovato che la cosa più semplice è di non hardcode la tua versione in AppCache. Dovresti generare il file in modo dinamico e generare in modo programmatico un valore univoco per la versione. Idealmente, nessuno dovrebbe introdurre modifiche agli stessi manifest, dovrebbero introdurre modifiche agli input che generano il file in modo programmatico.
Questo non è univoco per l'AppCache. Se trovi la necessità di modificare una riga specifica praticamente in ogni commit, probabilmente non dovresti codificare quella linea. Dovrebbe essere generato in qualche modo, in base a qualsiasi cambiamento nel repository richiedere una modifica a quella linea.
Tornando alla AppCache, ho trovato la cosa più facile da fare è:
- in fase di sviluppo, includono l'dell'ultima modifica di tutti i file nella AppCache
- in produzione, includere il commit ID del commit Git distribuito
Non ho idea di quale lingua si sta utilizzando, ma nel mondo Rails, il mio manifest AppCache è stato simile al seguente. Nessuno avrebbe mai dovuto cambiare questo file, avrebbero solo aggiungere o rimuovere file dal @files
matrice, che è gestito nel controller che serve questo manifesto:
CACHE MANIFEST
<% if Rails.env.development? %>
<% @cached_files.each do |file| %>
# <%= File.mtime(file) %>
<% end %>
<% else %>
# <%= `git rev-parse HEAD` %>
<% end %>
CACHE:
<% @cached_files.each do |file| %>
<%= file %>
<% end %>
NETWORK:
*
La prima parte, avvolto in Rails.env.development?
emette una serie di righe di commento, contenente l'ora dell'ultima modifica di ogni file incluso nel manifest. Ciò significa che, durante lo sviluppo, l'AppCache verrà automaticamente scaduto ogni volta che qualsiasi file incluso in esso viene modificato.
In produzione, AppCache è scaduto quando è stato distribuito un nuovo commit. Questo potrebbe essere eccessivo per te; se vuoi evitare di dover scartare inutilmente AppCache dai tuoi utenti, dovresti fare qualcosa di più intelligente come eseguire un hash dei file in modo che la cache scada quando i loro contenuti cambiano.
Alla fine, ho finito per scrivere una piccola libreria per aiutare ad eliminare i bit ripetitivi di generare manifesti. Sulla remota possibilità che si sta utilizzando Rails, si potrebbe trovare utile: https://github.com/meagar/rails_appcache
La domanda è generica e dovrebbe anche essere fornita una risposta generica. Ma per informazione: nel mio caso l'applicazione utilizza solo file JavaScript statici, CSS e HTML, quindi è sufficiente un server web estremamente semplice. Alcune parti opzionali utilizzano PHP, ma non è un requisito indispensabile per l'ambiente runtime (ma suppongo che il 100% dei server Web di sviluppo lo abbia a disposizione). Se esiste una soluzione in cui Git dovrebbe chiamare uno script, si dovrebbe considerare che gli sviluppatori stanno usando Linux, Windows e MacOS. – Chris