2013-07-29 14 views
25

Fondamentalmente, l'hash sul file busting della cache non si sta aggiornando.Django pipeline Cache Busting non sta aggiornando il file cache/hash

class S3PipelineStorage(PipelineMixin, CachedFilesMixin, S3BotoStorage): 
    pass 

PIPELINE_JS = { 
'main.js': { 
    'output_filename': 'js/main.min.js', 
    'source_filenames': [ 
     'js/external/underscore.js', 
     'js/external/backbone-1.0.0.js', 
     'js/external/bootstrap-2.2.0.min.js', 
    ] 
    } 
} 

Quando ho fatto funzionare l'ordine collectstatic, correttamente creato una cache file denominato "main.min.d25bdd71759d.js

Ora, quando faccio funzionare l'ordine busting, tuttavia, non riesce a sovrascrivere il file memorizzato nella cache (e aggiornare il hash) durante la fase di processo di post.

si continua l'aggiornamento "main.min.js", in modo tale che main.min.js è in corso con il mio file system. Un nuovo file nella cache, tuttavia, non viene creata. mantiene la stessa vecchia hash anche qualora il sottostante main.min.j s il file è stato modificato.

Quando ho eliminare manualmente il file memorizzato nella cache su AWS, ricevo il seguente messaggio di esecuzione collectstatic con verbosità impostato a 3:

Post-processed 'js/main.min.js' as 'js/main.min.d25bdd71759d.js 

settings.DEBUG è impostato su False

Perché non sarà l'hash aggiornare?

+0

Vogliate Mostra le impostazioni relative: PIPELINE_ENABLED, STATICFILES_STORAGE, STATICFILES_FINDERS – krasnoperov

+5

si può fare in modo che i main.min.js è diverso da quello precedente? L'hash non cambierà se non ci sono cambiamenti nel file stesso. Sembra che tu stia includendo solo le librerie in main.js, che non dovresti modificare, ecco perché le sto chiedendo. –

+0

Hai menzionato la tua memoria utente AWS (suppongo boto). Puoi verificare se il problema si riproduce ancora se si esegue il pipeline statico alla cartella locale (non a AWS). Suppongo che sia molto probabilmente un problema di boto. –

risposta

0

provare a utilizzare l'archiviazione manifesta invece:

class S3PipelineManifestStorage(PipelineMixin, ManifestFilesMixin, S3BotoStorage): 
    pass 

Secondo la documentazione Django qui https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/#cachedstaticfilesstorage Non è raccomandato usare CachedStaticFilesStorage.

I nomi dei file per i file statici sono probabilmente recuperati nella cache. Quindi usa quello manifesto.

CachedStaticFilesStorage non è raccomandato - in quasi tutti i casi ManifestStaticFilesStorage è una scelta migliore. Quando si utilizza CachedStaticFilesStorage ci sono diverse penalizzazioni prestazionali dal momento che una cache miss richiede i file hashing in fase di runtime. L'archiviazione remota dei file richiede diversi round trip per l'hash di un file in un errore di cache, poiché sono necessari diversi accessi ai file per garantire che l'hash del file sia corretto nel caso di percorsi di file nidificati.

notare che questo è anche documentato django-oleodotti http://django-pipeline.readthedocs.io/en/latest/storages.html#using-with-other-storages

Problemi correlati