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

o8x7eapl  于 2023-05-23  发布在  Go
关注(0)|答案(2)|浏览(160)

我在heroku上使用django-compressor,amazon s3提供静态文件,我一直遇到以下错误,压缩器生成的静态文件链接。我对压缩机和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 bucket。它们还共享相同的设置文件,所有唯一的设置都配置为环境变量。我已经检查了静态文件实际上被推送到它们各自的桶中。
压缩机和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暂时解决了这个问题。似乎没有任何方法可以在查询字符串中设置EXPIRATION TIME,只能在请求头中使用它。

guz6ccqo

guz6ccqo1#

给予这个:

AWS_QUERYSTRING_EXPIRE = 63115200

该值是从生成链接开始的秒数。

svdrlsy4

svdrlsy42#

以防有人遇到同样的问题:

AWS_QUERYSTRING_AUTH = False

这消除了任何到期等。根据用例并不总是需要过期(就像在我的用例和其他许多用例中一样)。这将允许您删除任何过期。

相关问题