s3 上で Cloudfront を CDN として使用して静的ファイルを提供する Django アプリを継承しています。現在、このアプリは静的ファイルの提供にバージョン管理を使用していません。Cloudfront はファイルの有効期限が切れるまでファイルをリロードせず、コンピューターのキャッシュから古いファイルをロードすることがあるため、これは非常に厄介です。バージョン管理を追加することで、これらの両方を修正できます。次のようなものからファイルを提供しますcloudfront_url/git_tag/static/*
。私の質問は次のとおりです。これを構成する最良の方法は何ですか? 現在チェックアウトされている git タグを使用して、パイプをgit describe
settings.py に追加し、STATIC_URL を設定して現在チェックアウトされているタグを STATIC_URL に組み込むことを考えていました。これを行うより標準的な方法はありますか?このようなことをしたいと思った Django ユーザーは私が初めてではありません。
1 に答える
私は Cloudfront と統合する手順に慣れていませんが、Django のCachedFileStorageを使用して、ファイル名に md5 ハッシュが追加されたアセットを生成できます。これにより、ファイルを改訂するたびに、新しい固有のアセットが生成されます。
あなたがする必要があるのは設定するだけです
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.CachedStaticFilesStorage'
そして走るmanage.py collectstatic
collectstatic
これにより、 ( ) に出力したフォルダーにアセットが作成されますSTATIC_ROOT
。ここから、これを Cloudfront にアップロードすると思います。あなたSTATIC_URL
もCloudfrontを指していると思います。
{% STATIC_URL %}/asset.extension
テンプレートに、使用するような参照を配置する代わりに
{% load static from staticfiles %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />
これにより、アセットが正しいアセットに適切にマッピングされます。
詳細については CachedFileStorage のドキュメントを参照してください。ただし、これは Django に組み込まれているがデフォルトでは有効になっていない非常に便利なものです。常に新しいアセットを提供し、古い js、css、またはイメージを返さないようにするという点で、まさにあなたが望むことを行います。