Caching konusunda uzman değilim, ancak nginx'in önbelleğe alma işleminin Django'yu kullanmasından daha iyi olabileceğini düşünüyorum. Django'nun işlenmesi gereken çok şey var, bu yüzden hafif statik sunucunun bu iğrenç işi yapmasına izin verebilirsiniz.
Ben CloudFlare kullanmayın, ama, ancak, benim statik önbelleğe hemen dosya değişiklikleri bu hattı kullanmak, Nginx (aynı dosyada şu) en son dosyayı yayar:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
}
bir olan snippet from this gist Şu anda üretim üretimini kullanıyorum, bu yüzden çalıştığını biliyorum.
Dikkat edeceğim bir nokta, MemCached'ın çalışmadığından ve bir Caching Arka Uçu olarak django'nuza bağlı olduğundan emin olun. Bunu söylüyorum, çünkü kafamı duvara çarptığında çok zaman harcadım, çünkü Memcached sayfamdaki her içeriğin 10 dakikaya kadar önbelleğe alınmasından kaynaklanıyordu. Benim .css değiştirebilir veya (statik) Yeni bir dosya yüklemek zaman, bu nginx yeri conf ile
, yeni bir dosya derhal sürece ben uygun dizine onları ed'
python manage.py collectstatic
ettik gibi devraldı
Yine de düzeltilmeyi bekliyorum, eğer bu aslında hile yapan kısım değilse. Yukarıdaki ile çalışır
Kanıtı Önbellek bozma (sizin deyişinizle)
- Ben
sudo rm -rf static/
- sitemi
Erişim (hala çalışıyor nginx) benim statik klasör Silinen sunucuya girdi
- Statik yüklü değil
- Geriye sarıldı ve
python manage.py collectstatic
- Siteme tekrar erişildi. Statics
- ile yüklendi Tarayıcı sabit yenilemesi kullanılmadı. Hayır nginx yeniden yükle | kullanılan her şeyi yeniden başlatın.
Nginx, statiklerinizi önbelleğe almak için yeterince akıllıdır, ancak dosya yeni olduğunda ve yayınlandığında statik yeniden yükleyin.
Şablonunuzdaki Sonra
import time
from django import template
register = template.Library()
@register.simple_tag()
def cache_bust():
return int(time.time())
sadece böyle bir şey yapmak Sadece hile yapar basit bir etiket oluşturmak
Tam olarak ne elde etmek istiyorsunuz? Caching? Eğer öyleyse, başarmak istediğinizden daha iyi yaklaşımlar vardır. Nginx ile çalışan Django 1.8 kullanıyorsanız, Nginx'in sizin için önbellekleme yapmasına izin vermenizi öneririm, Django en iyi yaptığı şeyi yapar. – Rexford
@Rexford Nginx'i kullanıyorum, evet, CloudFlare ile. Gömme önbelleği (örneğin, yeni bir dosya yüklediğimde kullanıcıların yeni dosyayı otomatik olarak görmesini istiyorum) istiyorum. Nginx'in benim için otomatik olarak önbelleği önleyeceğini mi söylüyorsun? Eğer öyleyse, detaylar verebilir misiniz? – Richard
Aşağıdaki cevabımı yerine getirin, yapmanız gereken şey tam olarak, yani yeni yüklenen içeriği hemen görünce, nginx size ücretsiz olarak böyle bir özellik sunuyor! Django yok, önbellek bozuculara ihtiyaç olmayabilir. – Rexford