2016-02-15 29 views
8

Bazı araştırmalar yapıyorum ve Django'nun (1.8) önbellek bozmayı nasıl kullanacağını açıklayan makaleler buldum, fakat durumumu açıklamıyorlar.Django 1.8 Önbellek bozma + Amazon S3

settings.py aşağıdaki ayarı ile ben S3 kullanıyorum (ve o inşaat):

önbellek docs belirlerim gerektiğini söylüyorlar bozmayı kullanmak için
STATICFILES_STORAGE= 'pms.s3utils.StaticRootS3BotoStorage' 

: STATICFILES_STORAGE='django.contrib.staticfiles.storage.ManifestStaticFilesStorage'

I don S3 ve önbellek bozmayı kullanmak için hangi ayarın kullanılacağını bilmek.

Teşekkürler!

cevap

9

Sonunda bir geçici çözüm buldum. myapp.s3utils.py dosyada

STATICFILES_STORAGE = 'myapp.s3utils.StaticRootS3BotoStorage' 
DEFAULT_FILE_STORAGE = 'myapp.s3utils.MediaRootS3BotoStorage' 

Ve bu:

benim settings.py dosyasında bu var benim S3 kova 2 farklı (statik ve yüklemeler) klasörlere dosyalarımı yükleyemeyeceksiniz amacıyla

from storages.backends.s3boto import S3BotoStorage 

StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static') 
MediaRootS3BotoStorage = lambda: S3BotoStorage(location='uploads') 

Ancak Django'nun önbellek bozmayı kullanamazdım.

from storages.backends.s3boto import S3BotoStorage 

from django.contrib.staticfiles.storage import ManifestFilesMixin 

class CustomS3Storage(ManifestFilesMixin, S3BotoStorage): 
    pass 

StaticRootS3BotoStorage = lambda: CustomS3Storage(location='static') 
MediaRootS3BotoStorage = lambda: S3BotoStorage(location='uploads') 

Temelde bunu önbellek bozmayı kullanmanızı sağlar ManiFestfilesMixin, ekler: çözüm benim myapp.s3utils.py dosyayı değiştirmek oldu.

Bir yan not olarak, yalnızca statik dosyalar için önbellek bozma özelliğini kullanabileceğimi, ancak yükleme dosyaları için kullanmadığımı görebilirsiniz. Bu nedenle, MediaRootS3BotoStorage, CustomS3Storage yerine S3BotoStorage sınıfını çağırır. Bu şekilde yapıyorum çünkü yükleme dosyaları sunucumda saklanmıyor (statik dosyalar), bunlar doğrudan S3 kovasına kaydediliyor, böylece collectstatic'u çalıştırdığımda sunucumda değiller. “Hash” isimlerini eklemek zorunda değilsiniz.

+1

Vay, bu günümü kurtar! Birkaç saat boyunca bununla hiç uğraşmadan uğraşıyorum. Bu cevabın neden daha olumlu oylara sahip olmadığını anlamıyorum. Bu basit değişiklik s3utils.py benim için bir çekicilik gibi çalışır :) Teşekkürler dostum !!! – rdiaz82

+0

'Statfiles.json' bu durumda, S3 veya yerel dosya sisteminde nerede saklanır? Ve her istek ile okunuyor mu? – Flimm

+0

Soruma cevap vermek gerekirse, "staticfiles.json" S3'te saklanır, herkes tarafından görüntülenebilir ve her istekte okunmaz. – Flimm