我有一个使用django-compressor压缩我的 CSS 和 JS 文件的 Heroku 设置。我的默认缓存后端是使用 memcached 设置的(在 Heroku 上实际上是 Memcachier)。我的静态文件在 Amazon S3 实例上提供(由django-storages和 boto 处理)。通常,我的设置与django-compressor docs 中的设置一致。
在我的页面中,指向我的压缩文件的链接有一个“过期”查询,似乎是从生成链接开始的一个小时。我不想将所有 CSS 或 JS 请求设置为没有过期,因为我有一些我不压缩的 CSS 和 JS(当我尝试时它给了我错误......可能是一个不同的问题)。
但是,每小时链接中断一次,并且该站点没有更多样式或 JS。看起来链接,或者至少是 expires 标头,正在被缓存而不是重新生成,所以在 expires 参数中的时间过去后,亚马逊不再返回文件。如果我刷新内存缓存,它会将链接中的 expires 标头更改为从那时起一个小时,这将问题修复一个小时,直到它再次过期。
以下是 9 月 18 日星期二美国东部标准时间下午 1:39 左右生成的链接示例:https ://zen180-static.s3.amazonaws.com/CACHE/css/68d31794a646.css?Signature=u%2FTxeF7LBBZTDV79YovOjoK2tcw %3D&Expires=1347993542&AWSAccessKeyId=AKIAIJ7VKLEX7HIMJZCA。首次生成后,该页面将继续提供该链接而无需更改。大约 2:39 EST(即 Unix 时间 1347993542,来自 URL 中的 expires 参数),该链接停止工作并发送回“过期” XML 消息(与现在相同)。但是在我刷新内存缓存之前,我的页面上仍然存在错误链接。
以下是相关设置:
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>