Django-compressor、Heroku、S3:请求已过期

2024-04-14

我在 Heroku 上使用 django-compressor 和 amazon s3 提供静态文件,并且使用压缩器生成的静态文件链接不断遇到以下错误。我对 compressor 和 s3 完全陌生:

https://xxx.s3.amazonaws.com/static/CACHE/css/989a3bfc8147.css?Signature=tBJBLUAWoA2xjGlFOIu8r3SPI5k%3D&Expires=1365267213&AWSAccessKeyId=AKIAJCWU6JPFNTTJ77IQ

<Error>
<Code>AccessDenied</Code>
<Message>Request has expired</Message>
<RequestId>FE4625EF498A9588</RequestId>
<Expires>2013-04-06T16:53:33Z</Expires>
<HostId>Fbjlk4eigroefpAsW0a533NOHgfQBG+WFRTJ392v2k2/zuG8RraifYIppLyTueFu</HostId>
<ServerTime>2013-04-06T17:04:41Z</ServerTime>
</Error>

我配置了两台 Heroku 服务器,一台用于登台,一台用于生产。他们每个人都有自己的数据库和 s3 存储桶。它们还共享相同的设置文件,所有独特的设置都配置为环境变量。我已经检查过静态文件实际上已被推送到各自的存储桶中。

压缩机和S3设置如下:

COMPRESS_ENABLED = True
COMPRESS_STORAGE = STATICFILES_STORAGE 
COMPRESS_URL = STATIC_URL
COMPRESS_ROOT = STATIC_ROOT
COMPRESS_OFFLINE = False

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')

每次我在暂存或生产环境中向 Heroku 推送更新时,最终都会遇到上述问题。有时一小时后发生,有时一天后发生,有时一周后发生,有时更新一推出就发生。奇怪的是,如果我将相同的更新推送到两个环境,一个会工作,而另一个会出现错误,或者它们都会首先工作,一个将在一小时内过期,另一个将在一周内过期。

如果有人能解释发生了什么,我将非常感激。显然,Expires 参数导致了问题,但是为什么持续时间会随着每次推送而变化,以及什么决定了时间量?如何更改到期时间?如果您需要更多信息,请告诉我。

更新:我通过设置 AWS_QUERYSTRING_AUTH = False 暂时解决了问题。似乎没有任何方法可以在查询字符串中设置过期时间,只能在请求标头中使用它。


尝试一下:

AWS_QUERYSTRING_EXPIRE = 63115200

该值是从生成链接时起的秒数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django-compressor、Heroku、S3:请求已过期 的相关文章

随机推荐