Domanda

Ho spinto una nuova versione del mio sito web, ma ora il CSS e le immagini statiche non sono distribuendo correttamente.

Questa è la pagina di incasinato: http://www.gaiagps.com

AppEngine mostra la versione più recente ad essere corretta se: http: //1.latest.gaiagps.appspot .com /

Qualsiasi aiuto?

È stato utile?

Soluzione

Ho visto questo prima su App Engine, anche quando si utilizza parametri di query di cache-busting come /stylesheets/default.css?{{ App.Version }}.

Ecco la mia (non confermato) teoria:

  1. spingere una nuova versione per la distribuzione o la modifica di una nuova versione per default.
  2. Anche se questo aggiornamento viene propagato a tutte le istanze in esecuzione la vostra applicazione GAE ...
  3. ... qualcuno colpisce il tuo sito.
  4. La richiesta di default.css{{ App.Version }} risorsa statico viene inviato a Google CDN, che ancora non ce l'ha.
  5. di Google CDN chiede GAE per la risorsa prima di propagazione dal punto # 2 è fatto per tutte le istanze.
  6. Se siete sfortunati, GAE serve la risorsa da un'istanza in esecuzione la vecchia versione ...
  7. ... che ora viene memorizzato nella cache in CDN di Google come la versione autorevole "nuovo".

Quando questo (se questo è ciò che accade) accade, posso confermare che nessuna quantità di lavoro del browser busting della cache sarà di aiuto. I server di Google CDN stanno tenendo la versione errata.

Per risolvere: L'unico modo che ho trovato per risolvere questo problema è quello di distribuire un'altra versione. Non si corre il rischio che ciò accada di nuovo (se non sono state apportate modifiche CSS in quanto la condizione di competizione), perché anche se si verifica la condizione di competizione, presumibilmente il vostro primo aggiornamento viene effettuato con il tempo si distribuisce il secondo, quindi tutte le istanze saranno al servizio della versione corretta non importa quale.

Altri suggerimenti

In seguito è ciò che ha funzionato per me.

  1. Servite il vostro file CSS dal dominio statico. Questo viene automaticamente creato da GAE.

    // statica. {Your-app-id} .appspot.com / {css-file-path}

  2. distribuire l'applicazione. A questo punto sarà rotto la vostra applicazione.

  3. cambiare la versione del file css

    // statica. {Your-app-id} .appspot.com / {css-file-path}? V = {version-Name}

  4. distribuire nuovamente.

Ogni volta che si cambia il file css. si dovrà ripetere 2,3 e 4.

Il link guarda bene a me, a meno che non mi manca qualcosa.

Si può avere in cache il vecchio CSS, e non ottenere il nuovo CSS dopo l'aggiornamento di esso. Prova a svuotare la cache del browser e vedere se funziona.

Andare al download 1.Latest il nuovo CSS dato che non è nella cache, in modo che appaia correttamente per voi.

Ho avuto questo problema pure. Stavo usando pallone con GAE quindi non ho avuto un gestore statica nel mio app.yaml. Quando ho aggiunto, il deploy funziona. Prova ad aggiungere qualcosa di simile

handlers:
- url: /static
  static_dir: static

al vostro app.yaml e distribuire nuovamente. Ha funzionato per me. A quanto pare Google sta cercando di ottimizzare per non aggiornare i file che pensa gli utenti non possono vedere.

Per quanto trovato da shoresh , la documentazione per l'ambiente standard per lo stato Pyhton che entrambe le impostazioni per statica scadenza della cache , il singolo elemento expiration e l'elemento default_expiration-alto livello, sono responsabili della definizione" l'ora di scadenza [che] verrà inviato nel Cache-Control e Expires intestazioni di risposta HTTP". Questo significa che "i file potrebbero essere memorizzati nella cache dal browser dell'utente, nonché dai server di caching proxy intermedio, come gli Internet Service Provider".

Il problema qui è che "ri-distribuzione di una nuova versione dell'app sarà non ripristinare le cache". Quindi, se uno ha default_expiration impostata su, ad esempio, 15 giorni, ma apporta una modifica a un file CSS o JS e ri-distribuire l'applicazione, non v'è alcuna garanzia che tali file saranno serviti automaticamente a causa di cache attivi, in particolare a causa intermedia caching proxy server, che possono includere i server di Google cloud -. quello che sembra essere il caso, in quanto che accede your-project-name.appspot.com serve anche file obsoleti

La medesima documentazione legata soprattutto afferma che "se mai intenzione di modificare un file statico, dovrebbe avere un breve (meno di un'ora) data di scadenza. Nella maggior parte dei casi, il tempo di scadenza 10 minuti di default è appropriato". Questo è qualcosa che uno deve pensare a prima impostazione qualsiasi scadenza della cache statica. Ma per coloro che, come me, non sapeva tutto questo in anticipo e sono già stati catturati da questo problema, ho trovato una soluzione.

Anche se gli stati di documentazione che non è possibile cancellare quei caching proxy intermedio, si può eliminare almeno la cache di Google Cloud.

Per fare in modo , la testa al tuo Google Cloud Console e aprire il progetto. Sotto il menu hamburger sinistra, testa ai bagagli -> Browser. Ci si dovrebbe trovare almeno un secchio: your-project-name.appspot.com. Sotto la colonna del ciclo di vita, fare clic sul collegamento per quanto riguarda your-project-name.appspot.com. Eliminare tutte le regole esistenti, in quanto possono entrare in conflitto con quello si creerà ora.

Crea una nuova regola facendo clic sul pulsante 'Aggiungi regola'. Per le condizioni degli oggetti, scegliere solo l'opzione 'recente versione' e impostarlo su 1. Non dimenticare di cliccare sul pulsante 'Continua'. Per l'azione, selezionare 'Elimina' e fare clic sul pulsante 'Continua'. Salva la nuova regola.

Questa regola appena creata sarà richiedere fino a 24 ore per entrare in vigore, ma almeno per il mio progetto ci sono voluti solo pochi minuti. Una volta che è installato e funzionante, la versione dei file che vengono serviti dalla vostra applicazione sotto your-project-name.appspot.com sarà sempre l'ultima schierato , la soluzione del problema. Inoltre, se si sta regolarmente la modifica dei file statici, è necessario rimuovere l'elemento default_expiration dal file app.yaml, che contribuirà a evitare la memorizzazione nella cache non intenzionale da altri server.

Ecco che cosa ha funzionato per me:

In primo luogo, ho cambiato il version su app.yaml .

Quindi seguire questi passaggi di seguito

Vai alla console -.> Clicca sul progetto

Nel menu laterale, fai clic su calcolo -> Versioni :

Non ci sarà tutte le versioni, e quale versione è di default. La mia era impostato su una versione precedente.

Segna la nuova versione.

Per me ha funzionato. Qualsiasi preoccupazione?

Dalla documentazione per l'ambiente standard per Pyhton: static_cache_expiration .

  

Dopo che un file viene trasmesso con un dato tempo di scadenza, non v'è   generalmente alcun modo per cancellare fuori cache intermedi, anche se il   utente cancella la propria cache del browser. Ri-distribuzione di una nuova versione del   applicazione non si ripristinerà le cache. Pertanto, se mai intenzione di modificare un   file statici, dovrebbe avere un breve (meno di un'ora) scadenza   tempo. Nella maggior parte dei casi, il tempo di scadenza 10 minuti di default è   appropriato.

Per le nuove persone che vengono a questa antica domande / serie di risposte ho voluto dare una risposta aggiornata. Credo che nel 2018-19 le seguenti informazioni sarà probabilmente risolvere la maggior parte dei problemi di aggiornamento CSS persone stanno avendo:

Assicurati che il tuo app.yaml ha il seguente:

 handlers:
   - url: /static
     static_dir: static
  • Esegui gcloud app deploy
  • Mettere in frigorifero per 10 minuti .. e lo spostamento-reload tuo sito web

Ok Per le persone più recenti che vedono questo problema ho provato l'approccio cache-scoppio e sembrano avere fissato qui è un esempio di quello che ho fatto per l'importazione di file css sul app.cfg creare una variabile per tenere il vostro AppID come set in file di app.yaml e impostarlo come quella qui sotto

<link href="{{ url_for('static', filename='file.css') }}?{{config.APP_ID}}" rel="stylesheet"> 

Anche per il file app.yaml aggiungere questo config per essere al sicuro

gestori:

  • URL: static / static_dir: static

Prova pulizia della cache del browser. Ha avuto esattamente lo stesso problema, ma ho riparato semplicemente svuotare la cache.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top