CSS および JS ファイルを圧縮するdjango-compressorを使用した Heroku セットアップがあります。デフォルトのキャッシュ バックエンドは memcached (Heroku では実際には Memcachier) でセットアップされています。私の静的ファイルは Amazon S3 インスタンス ( django-storagesと boto によって処理されます) で提供されています。一般的に、私のセットアップはdjango-compressor docs のこれと一致しています。
私のページでは、圧縮ファイルへのリンクに「有効期限」クエリがあり、リンクが生成されてから 1 時間後に表示されます。圧縮していない CSS と JS があるため、すべての CSS または JS リクエストの有効期限を設定したくありません (試してみるとエラーが発生します... おそらく別の質問です)。
ただし、1 時間に 1 回リンクが切れ、サイトにスタイルや JS がなくなります。リンク、または少なくとも expires ヘッダーがキャッシュされ、再生成されていないように見えるため、expires 引数の時間が経過すると、Amazon はファイルを返さなくなります。memcache をフラッシュすると、リンクの expires ヘッダーがそれから 1 時間に変更され、再び期限切れになるまで 1 時間問題が修正されます。
以下は、本日 9 月 18 日火曜日の東部標準時間午後 1 時 39 分頃に生成されたリンクの例です。 %3D&Expires=1347993542&AWSAccessKeyId=AKIAIJ7VKLEX7HIMJZCA . 最初に生成された後、ページは変更なしでそのリンクを提供し続けます。2:39 EST (つまり、URL の expires 引数からの Unix 時間 1347993542) 頃、そのリンクは動作を停止し、"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>