Non sono esperto in Caching, ma penso che lasciare che nginx gestisca il caching potrebbe essere meglio che usare Django. Django ha molto da gestire, quindi puoi lasciare che il server statico leggero faccia quel brutto lavoro.
Non faccio uso di CloudFlare, ma io uso questa linea di memorizzare nella cache i miei statica, però, immediatamente il file modifiche, Nginx propaga il file più recente (che è lo stesso file):
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
}
che è un snippet from this gist Attualmente sto usando quella conf nella produzione , quindi so che funziona.
Una cosa che farò notare è, assicurarsi che MemCached non funzioni e sia collegato al django come back-end di cache. Dico questo, perché ho passato molte ore in passato a colpire la testa contro il muro, semplicemente perché MemCached memorizzava nella cache la mia pagina con ogni contenuto in esso per un massimo di 10 minuti.
con questa conf posizione nginx, Ogni volta che cambio il mio css, o caricare un nuovo file (statica), il nuovo file in carico subito, fino a quando ho python manage.py collectstatic
'li cato nella directory appropriata
Io sto per essere corretto, se questo non è in realtà la parte che fa il trucco.
La prova che sopra funziona con cache-busting (come la chiama lei)
- sono andato al server
- eliminato il mio cartella statica (nginx ancora in corso)
sudo rm -rf static/
- accede mio sito
- Nessun caricamento statico
- Torna indietro, e
python manage.py collectstatic
- Ho di nuovo accesso al mio sito. Statics loaded
- Non è stato utilizzato alcun aggiornamento hardware del browser. No nginx reload | restart qualsiasi cosa sia stata usata.
Nginx è abbastanza intelligente da memorizzare le statiche nella cache, ma ricarica lo statico quando il file è nuovo e lo serve.
Che cosa esattamente vuoi ottenere? Caching? Se è così allora ci sono approcci migliori di quello che desideri realizzare. Se stai usando Django 1.8, in esecuzione con Nginx, ti suggerisco di lasciare che Nginx faccia la cache per te, mentre Django fa quello che sa fare meglio. – Rexford
@Rexford Sto utilizzando Nginx, sì, con CloudFlare. Voglio mettere in cache bust (cioè gli utenti vedono automaticamente il nuovo file quando carico un nuovo file). Stai suggerendo che Nginx verrà automaticamente messo in cache per me? Se sì, puoi fornire dettagli? – Richard
Vedere la mia risposta qui sotto, a patto che sia ciò che si desidera realizzare, ad esempio, vedere immediatamente qualsiasi contenuto appena caricato nuovamente, nginx offre tale funzionalità gratuitamente! Nessun django, nessun cache-busters potrebbe essere necessario. – Rexford