Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django压缩器/Django存储链接被错误缓存;到期_Python_Django_Amazon S3_Django Staticfiles_Django Compressor - Fatal编程技术网

Python Django压缩器/Django存储链接被错误缓存;到期

Python Django压缩器/Django存储链接被错误缓存;到期,python,django,amazon-s3,django-staticfiles,django-compressor,Python,Django,Amazon S3,Django Staticfiles,Django Compressor,我有一个Heroku设置,可以压缩CSS和JS文件。我的默认缓存后端是用memcached设置的(在Heroku上时实际上是memcacheer)。我的静态文件在AmazonS3实例上提供(由和boto处理)。一般来说,我的设置符合 在我的页面中,指向我的压缩文件的链接有一个“expires”查询,该查询似乎在链接生成后一小时内。我不想设置所有CSS或JS请求都没有过期,因为我有一些CSS和JS没有压缩(当我尝试时,它会给我错误…可能是另一个问题) 然而,每小时链接就会中断一次,网站就不再有样式

我有一个Heroku设置,可以压缩CSS和JS文件。我的默认缓存后端是用memcached设置的(在Heroku上时实际上是memcacheer)。我的静态文件在AmazonS3实例上提供(由和boto处理)。一般来说,我的设置符合

在我的页面中,指向我的压缩文件的链接有一个“expires”查询,该查询似乎在链接生成后一小时内。我不想设置所有CSS或JS请求都没有过期,因为我有一些CSS和JS没有压缩(当我尝试时,它会给我错误…可能是另一个问题)

然而,每小时链接就会中断一次,网站就不再有样式或JS了。看起来链接,或者至少是expires头,正在被缓存而没有重新生成,因此在expires参数中的时间过去之后,Amazon不再返回该文件。如果我刷新memcache,它会将链接中的expires头更改为一个小时,这将修复一个小时的问题,直到它再次过期

以下是一个链接示例,该链接是在美国东部时间今天,9月18日星期二下午1:39左右生成的:。在第一次生成之后,页面将继续为该链接提供服务,而不会进行任何更改。大约在美国东部时间2:39(即Unix时间1347993542,来自URL中的expires参数),该链接停止工作并发回一条“Expired”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,
  }
}
以下是错误:

<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>

如果希望浏览器缓存静态内容,请相应地设置
settings.AWS_HEADERS
(如中所述):


如果您确实需要重新生成链接,请找到它存储在memcache中的位置,并将发送给Amazon的缓存时间设置为链接过期时间(从
django compressor
docs判断,它应该是
设置之一。compression\uu DELAY
)。

您考虑过在S3上启用对静态文件的公共访问吗?是的,这就是我最终所做的。但我希望有expires标题,以便浏览器可以缓存页面。
AWS_HEADERS = {
    'Expires': 'Sun, 19 Jul 2020 18:06:32 GMT'
}