Форум сайта python.su
Всем привет, появилась необходимость хранить статику(js/css/img) на Amazon S3 и раздавать через ихний же CDN. Хотелось бы услышать кто как собирает статику.
Что есть сейчас:
Подключил django-storages, в STATICFILES_STORAGE указал storages.backends.s3boto.S3BotoStorage, ну и дополнительные настройки, статика начала загружаться на S3. В принципе все работает за исключением того что при обновлении какого нибудь файла и заливке его на S3 CDN продолжает отдавать старую версию.
Посмотрел на https://dribbble.com/, у них к каждому файлу дописывается его хэш что решает проблему кэша, и что заметил в файлах css имена изображений также с хэшем, то есть по идее они как-то парсят каждый раз css и меняют названия файлов.
Вообщем готов услышать любые предложения (возможно такое проще сделать через какой нибудь JS сборщик?)
Спасибо!
Офлайн
zillionПосмотрите в сторону минимализации css/js. Вот например есть такой Django Compressor, сожмет ваши скрипты/стили в один файл. При изменении пересожмет и переназовет.
Вообщем готов услышать любые предложения
Офлайн
FishHook
Офлайн
zillionА какие проблемы с картинками, они же не изменяются. Соответственно, по поводу кэширования париться не придется, закэшировались и хорошо.
то как быть с картинами
Офлайн
FishHook
А какие проблемы с картинками, они же не изменяются.
AWS_ACCESS_KEY_ID = '***************' AWS_SECRET_ACCESS_KEY = '******************' AWS_STORAGE_BUCKET_NAME = '******' COMPRESS_ENABLED = True AWS_S3_CUSTOM_DOMAIN = '************.cloudfront.net' STATIC_URL = 'https://{0}/assets/'.format(AWS_S3_CUSTOM_DOMAIN) COMPRESS_OFFLINE = True COMPRESS_URL = STATIC_URL COMPRESS_ROOT = STATIC_ROOT COMPRESS_STORAGE = 'CachedS3BotoStorage.CachedStaticS3BotoStorage' STATICFILES_STORAGE = COMPRESS_STORAGE AWS_HEADERS = { 'Expires': 'Thu, 31 Dec 2099 20:00:00 GMT', 'Cache-Control': 'max-age=94608000', } COMPRESS_OUTPUT_DIR = ''
from django.core.files.storage import get_storage_class from storages.backends.s3boto import S3BotoStorage class CachedS3BotoStorage(S3BotoStorage): """ S3 storage backend that saves the files locally, too. """ def __init__(self, *args, **kwargs): super(CachedS3BotoStorage, self).__init__(*args, **kwargs) self.local_storage = get_storage_class( "compressor.storage.CompressorFileStorage")() def save(self, name, content): name = super(CachedS3BotoStorage, self).save(name, content) self.local_storage._save(name, content) return name CachedStaticS3BotoStorage = lambda: CachedS3BotoStorage(location='assets')
Отредактировано zillion (Янв. 26, 2016 23:53:19)
Офлайн