У меня есть установка Heroku с django-compressor, сжимающим мои файлы CSS и JS. Мой бэкэнд кеширования по умолчанию настроен с помощью memcached (на самом деле Memcachier на Heroku). Мои статические файлы обслуживаются в экземпляре Amazon S3 (обрабатываются хранилищами django а> и бото). Обычно мои настройки соответствуют этой из документации django-compressor.
На моих страницах ссылки на мои сжатые файлы имеют запрос «истекает», который кажется через час после создания ссылки. Я не хочу, чтобы у меня не было срока действия для всех запросов CSS или JS, потому что у меня есть некоторые CSS и JS, которые я не сжимаю (это дает мне ошибки, когда я пытаюсь ... вероятно, другой вопрос).
Однако раз в час ссылки прерываются, и на сайте больше нет стилей или JS. Похоже, что ссылка или, по крайней мере, заголовок expires кэшируется, а не регенерируется, поэтому по истечении времени в аргументе expires Amazon больше не возвращает файл. Если я сброшу кэш памяти, он изменит заголовок expires в ссылке на час после этого, что решит проблему на час, пока не истечет срок его действия снова.
Вот пример ссылки, созданной около 13:39 EST сегодня, вторник, 18 сентября: https://zen180-static.s3.amazonaws.com/CACHE/css/68d31794a646.css?Подпись=и/=&TxeF7LBBZTDV79YovOjoK2tcwИстекает=1347993542&AWSAccessKeyId=AKIAIJ7VKLEX7HIMJZCA»отн=. После первого создания страница продолжает обслуживать эту ссылку без изменений. Примерно в 2:39 EST (то есть время Unix 1347993542 из аргумента expires в URL-адресе) эта ссылка перестала работать и отправила обратно XML-сообщение «Expired» (то же самое, что и сейчас). Но плохая ссылка все еще была на моей странице, пока я не сбросил кэш памяти.
Вот соответствующие настройки:
COMPRESS_ENABLED = True
STATICFILES_STORAGE = '[my app's name].storage.CachedS3BotoStorage' (a subclass of S3BotoStorage that is almost identical to the one from django-compressor's docs linked above)
COMPRESS_STORAGE = STATICFILES_STORAGE
COMPRESS_URL = STATIC_URL
CACHES = {
'default': {
'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
'LOCATION': 'localhost:11211',
'TIMEOUT': 500,
'BINARY': True,
}
}
Вот ошибка:
<Error>
<Code>AccessDenied</Code>
<Message>Request has expired</Message>
<RequestId>81A63F24378ECB5E</RequestId>
<Expires>2012-09-18T18:39:02Z</Expires>
<HostId>lIr5l9Fna95DUfk6hUsWqhO5EQNn6Ayu8BatpEavis8YzLvsaJRru4O8P/50pgMy</HostId>
<ServerTime>2012-09-18T18:59:51Z</ServerTime>
</Error>