Django-compressor/django-storages链接被错误地缓存; 到期

Dan*_*son 7 python django amazon-s3 django-staticfiles django-compressor

我有一个Heroku设置与django压缩器压缩我的CSS和JS文件.我的默认缓存后端是用memcached设置的(在Heroku上实际上是Memcachier).我的静态文件在Amazon S3实例上提供(由django-storages和boto处理).一般来说,我的设置与django-compressor docs中的这个设置一致.

在我的页面中,指向我的压缩文件的链接有一个"过期"查询,该查询似乎是从生成链接起一小时.我不希望所有的CSS或JS请求都没有过期,因为我有一些我不压缩的CSS和JS(当我尝试时它给了我错误......可能是一个不同的问题).

但是,每小时一次链接断开,网站没有更多样式或JS.看起来链接或至少是expires标头正在被缓存而不是重新生成,因此在expires参数传递的时间过后,Amazon不再返回该文件.如果我刷新内存缓存,它会将链接中的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左右(即Unix时间1347993542,来自URL中的expires参数),该链接停止工作并发回"过期"XML消息(与现在相同).但是我的页面上仍然存在错误的链接,直到我刷新memcache.

以下是相关设置:

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,
  }
}
Run Code Online (Sandbox Code Playgroud)

这是错误:

<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>
Run Code Online (Sandbox Code Playgroud)

pat*_*rys 2

如果您希望浏览器缓存静态内容,请进行settings.AWS_HEADERS相应设置(如亚马逊最佳实践中所述):

AWS_HEADERS = {
    'Expires': 'Sun, 19 Jul 2020 18:06:32 GMT'
}
Run Code Online (Sandbox Code Playgroud)

如果您确实需要重新生成链接,请找到它存储在内存缓存中的位置,并将缓存时间设置为您发送给亚马逊的链接过期时间(从django-compressor文档来看,它应该是其中之一settings.COMPRESS_*_DELAY)。