2016-02-15 8 views
8

私はいくつかの調査を行っており、Django(1.8)キャッシュ破損の使用方法を説明する記事を見つけましたが、私の状況を説明しません。Django 1.8キャッシュ破損+ Amazon S3

settings.pyに次の設定で、私はS3を使用しています(と、それは動作します):docsをつぶしキャッシュを使用するためには

STATICFILES_STORAGE= 'pms.s3utils.StaticRootS3BotoStorage' 

は、私が設定する必要が言う:STATICFILES_STORAGE='django.contrib.staticfiles.storage.ManifestStaticFilesStorage'

IドンS3とキャッシュ無効化の両方を使用するためにどのような設定を使用するかを知っています。

ありがとうございます!

答えて

9

最終的に回避策が見つかりました。

私のS3バケットに2つの異なるフォルダ(静的およびアップロード)に自分のファイルをアップロードすることができるようにするために、私は私のsettings.pyファイルでこれを持っている:

myapp.s3utils.pyファイルで

STATICFILES_STORAGE = 'myapp.s3utils.StaticRootS3BotoStorage' 
DEFAULT_FILE_STORAGE = 'myapp.s3utils.MediaRootS3BotoStorage' 

そして、これ

from storages.backends.s3boto import S3BotoStorage 

StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static') 
MediaRootS3BotoStorage = lambda: S3BotoStorage(location='uploads') 

しかし、私はDjangoのキャッシュバストを使用することができませんでした。基本的に、それはあなたが破裂キャッシュを使用することができますManiFestfilesMixinを、追加

from storages.backends.s3boto import S3BotoStorage 

from django.contrib.staticfiles.storage import ManifestFilesMixin 

class CustomS3Storage(ManifestFilesMixin, S3BotoStorage): 
    pass 

StaticRootS3BotoStorage = lambda: CustomS3Storage(location='static') 
MediaRootS3BotoStorage = lambda: S3BotoStorage(location='uploads') 

: 溶液を、私のmyapp.s3utils.pyファイルを変更することでした。

サイドノートでは、静的ファイルにはキャッシュ無効化を使用していますが、アップロードファイルにはキャッシュ無効化を使用していないことがわかります。そのため、MediaRootS3BotoStorageは、CustomS3Storageではなく、S3BotoStorageクラスを呼び出します。 アップロードファイルが私のサーバー(静的ファイル)に保存されていないので、S3バケットに直接格納されているので、コラテラルは私のサーバーにないので、名前にハッシュを追加する必要はありません。

+1

これは私の一日を節約する! 私はこれを何時間も成功させずに処理してきました。私はこの答えがより肯定的な票を持っていない理由を理解していません。 s3utils.pyのこの単純な変更は、私の魅力のように機能します:) ありがとうございました!!! – rdiaz82

+0

この場合、 'staticfiles.json'はS3またはローカルファイルシステムにどこに格納されますか?それはすべての要求と一緒に読み込まれますか? – Flimm

+0

私の質問に答えるためには、 'staticfiles.json'がS3に保存されて公開されているように見え、それはすべてのリクエストで読み込まれないようです。 – Flimm

関連する問題