4

最近 Heroku avec に移行し、Cloudfront ディストリビューションを使用してアセットを Amazon S3 に保存することにしました。

Django Pipeline を使用してアセットを圧縮/コンパイルしましたが、正しいバージョンを指すようにできませんでした。「collectstatic」管理コマンドを実行すると、うまく機能します。

「css/compress_profile_school.css」を「css/compress_profile_school.82973855aca5.css」として後処理 「css/compress_profile.css」を「css/compress_profile.d120536e24f9.css」として後処理 「css/compress_document.css」を「 css/compress_document.864dd7603769.css ...

しかし、アプリを実行すると、正しいバージョンを指していませんでした (ハッシュのないバージョンを使用しています)。

アプリケーションはここで実行されています: http://dev.unishared.com/

Django にバンドルされている staticfiles アプリも正しいバージョンを指すことができないようです。

新しいアセット バージョンをプッシュするたびに、Cloudfront ディストリビューションを無効にする必要があり、時間がかかります..

ご協力いただきありがとうございます。

4

3 に答える 3

1

サイバーデリアのおかげで、なんとか機能させることができました。

まず、「CachedFilesStorage」は、DEBUG設定がオフ(= False)の場合にのみファイル名にハッシュ名を入れます。それは私の本番サーバーでうまく動作します。

ここから、「collectstatic」コマンドは、S3に適切なファイルをアップロードしています(名前にハッシュが含まれています)。2番目の問題が発生しました。キャッシュされたURLがS3バケットを指しているが、「STATIC_URL」設定で定義されたCloudfrontを指していません。これは、CloudfrontではなくS3で動作するカスタムストレージで使用されるdjango-storages/botoに関連していると思います。

class S3PipelineStorage(PipelineMixin, CachedFilesMixin, StaticStorage):
pass

(静的ストレージは、ロケーションが「静的」に設定されたS3BotoStorageサブクラスです)。

ここで、S3ではなくCloudfrontで正しく動作するようにする方法を見つける必要があります。

ご協力いただきありがとうございます!

編集:

私はこの投稿を介してそれが機能するように考えました:Django-compressor:S3に書き込む方法、CloudFrontから読み取る方法は?

「カスタムドメイン」キーを定義すると、AmazonS3の代わりにCloudfrontドメインが使用されます。

AWS_QUERYSTRING_AUTHをFalseに設定して機能させる必要があることを忘れました。

于 2013-01-29T18:21:02.307 に答える
1

PIPELINE_STORAGE何をしているのか本当にわからない限り、セットアップしないでください。ただセットアップしてSTATICFILES_STORAGEください。ストレージのドキュメントを参照してください。

于 2013-01-27T12:23:50.633 に答える
0

状況は異なる場合がありますが、一般的には、このコンテンツを S3 で提供しないことをお勧めします。

ホワイトノイズのドキュメントからの抜粋

Django-Storages などを使用して、静的ファイルを S3 にプッシュするべきではありませんか?

いいえ、すべきではありません。このアプローチの主な問題は、現在 Amazon S3 が gzip されたコンテンツをユーザーに選択的に提供できないことです。gzip を使用すると、CSS と JavaScript に必要な帯域幅を大幅に削減できます。しかし、現在使用されているすべてのブラウザーは gzip されたコンテンツをデコードできますが、ユーザーは、gzip されたコンテンツを適切に処理しない、粗悪な企業プロキシまたはウイルス対策スキャナーの背後にいる可能性があります。Amazon S3 では、gzip 圧縮されたコンテンツを誰にも提供しない (帯域幅を浪費する) か、全員に提供する (特定のユーザーに対してサイトが壊れるリスクを冒す) かを選択する必要があります。

...をちょきちょきと切る...

静的ファイルを処理するためのプッシュ ベースのアプローチの 2 つ目の問題は、展開プロセスに複雑さと脆弱性が追加されることです。ストレージ バックエンドに固有の追加のライブラリ、追加の構成と認証キー、および特定の時点で実行する必要がある追加のタスクです。すべてが機能するための展開。

django-pipelines を使用してデプロイ時にコンテンツに参加して縮小し、whitenoise を使用して静的コンテンツを提供し、Cloudfront CDN をキャッシュに使用しています。

私はこの方法に従いました。

また、CDN + S3 ではなく、CDN ヒットに対してのみ料金を支払っていることも意味します。

于 2015-12-15T23:58:24.117 に答える