2013-04-06 47 views
9

私はdjango-compressorをherokuで使用しています。amazon s3で静的ファイルを提供しています。私は完全に圧縮機に新しいとS3午前:django-compressor、heroku、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> 

私が構成された2台のHerokuのサーバ、ステージング用と生産のための1つを持っています。彼らはそれぞれ独自のデータベースと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のに更新をプッシュするたびに、私は最終的には上記の問題が発生した次のよう

コンプレッサー& S3の設定がされています。場合によっては1時間後、時には1日後、時には1週間後に、場合によっては更新が追い出されるとすぐに発生します。奇妙なことは、両方の環境に同じアップデートを適用すると、1つは動作し、もう1つはエラーが発生するか、どちらも最初は動作し、1つは1時間で失効し、もう1つは1週間で失効します。

誰かが何が起こっているのかを説明できると本当に感謝しています。明らかにExpiresパラメータは問題を引き起こしていますが、なぜ各プッシュで時間が変わるのでしょうか、何が時間を決定するのでしょうか?有効期限はどのように変更しますか?詳細が必要な場合はお知らせください。

更新:AWS_QUERYSTRING_AUTH = Falseを設定することで一時的に問題を解決しました。クエリ文字列にEXPIRATION TIMEを設定する方法はありません。要求ヘッダーでのみ使用します。

+0

サーバーのシステム時刻が更新されていることを確認します。システム時刻が同期されていないVMを実行中にこのエラーが発生しました。 –

+0

私はHerokuにいるので、システム時間を制御できません。 – arctelix

答えて

17

は、この試してみて:

AWS_QUERYSTRING_EXPIRE = 63115200 

値は、リンクが生成された時点からの秒数です。有効期限は、常に(鉱山および他の多くのように)ユースケースに基づいて必要とされていない

AWS_QUERYSTRING_AUTH = False 

これは、有効期限のいずれかを削除し、その他:念の誰かで

+1

これは機能しましたが、理由についてもう少し詳しくお聞かせください。これはBottoまたはDjango-compressor設定ですか?それはどこに文書化されていますか? – arctelix

+1

これはboto設定ですが、デフォルトでは、botoは有効期限のクエリーストリングをURL出力に入れますが、かなり短くなっています。これは、その有効期限を2年間延長します。私はそれを見つけただけで、ソースを通過して、それに関連する言葉をいくつか見ています。 – mjacksonw

3

は、この同じ問題を持っています。これにより、期限切れを取り除くことができます。

+0

実際に有効期限を変更する正しい方法は、ウィルキンソンの答えです。 AWS_QUERYSTRING_AUTH = Falseは、有効期限の短い問題の既知のワークアラウンドであったエピソードperamを無効にします。 – arctelix

関連する問題