2012-02-03 16 views
0

Django 1.3のstaticfiles + django-compressorを使用して、CloudFrontでメディアを入手しています。しかし、最終的なURLにユニークなキャッシュバスターを追加する最良の方法を考え出すのは難しいので、新しいディストリビューションや無効化リクエストを作成する必要はありません。Django 1.3 staticfiles + django-compressor + CloudFront

誰でもstaticfiles + django-compressorでこれを行う方法の例はありますか?

/fslk39sod/media/css/base.css 

これは、{%静的%}テンプレートタグも変更を認識する必要があることを意味します。たとえば、

/aks290209sdlk/media/css/base.css 

私たちが展開するたびに、ハッシュを変更します。私たちは複数のアプリケーションサーバーを持っているので、何をするにしても、それらの間で同期する必要があります。

+0

申し訳ありませんが、私は本当に問題を理解していません。 django-compressorは、ファイルのmtimeまたはその内容から計算された値に基づいて、自動的にファイル名にハッシュを付けます(ユーザ定義可能)。静的ファイルをCDNにデプロイする場合、実際に使用されているサーバーによってmtimeが異なる可能性があるので、ファイルの内容を使用することを実際にお勧めします。いずれにしても、ファイルを変更すると完全に新しいファイル名になりますので、バストするキャッシュは事実上ありません。 –

答えて

0

これはあなたの質問に対する答えではありませんが、あなたが資産運用会社を評価していると言いますから、それはかなり話題にはなりません。

私はdjango-compressorをよく知っていませんが、個人的には、他の資産管理者が使いやすくなっています。特定のニーズに応じてhttp://www.djangopackages.com/grids/g/asset-managers/から1つを選択することができます。私はdjango-mediageneratorを使用していますが、これは非常に使いやすく強力です。まず、あなたのsettings.pyにメディアバンドルを定義します。

MEDIA_BUNDLES = (
    ('main.css', 
     'css/reset.css', 
     'css/design.css', 
    ), 
    ('main.js', 
     'js/jquery.js', 
     'js/jquery.autocomplete.js', 
    ), 
) 

はその後もsettings.pyでは、メディア処理パスを定義します。

ROOT_MEDIA_FILTERS = { 
    'js': 'mediagenerator.filters.yuicompressor.YUICompressor', 
    'css': 'mediagenerator.filters.yuicompressor.YUICompressor', 
} 

- あなたはにマージし、圧縮し、スクリプトを組み合わせることができます1つのファイル、それらにハッシュを追加するなど

あなたはちょうど:./manage.py generatemediaとvoilaを呼んでいます(あなたのsettings.pyに入力する必要がある設定がいくつかありますが、 。テンプレートで

それは次のようになります。あなたは、これはジャンゴ・コンプレッサー・アプローチの逆で見ることができるように

{% include_media 'main.css' media='screen,print' %} 
<img src="{% media_url 'some/image.png' %}" /> 

- ここでは、settings.pyに先行あなたの資産を定義し、それらを参照します。

+2

settings.pyファイル内の静的ファイルのそれぞれをすべてリストする必要はなく、django-compressorを使用することの主な利点の1つです。誰かが最初に良いアイデアだろうと思ったのはサディストです。 –

+0

@Chris:火炎戦争を始めたいなら、チャットに移動しましょう:-) –

0

DEBUGをTrueに設定できますか?私はdjango-compressorがDEBUG = Falseのときだけハッシュを行うと信じています。