Web サイトの新しいバージョンをプッシュしましたが、CSS と静的イメージが適切にデプロイされません。
これがめちゃくちゃなページです:http://www.gaiagps.com
ただし、Appengine は最新バージョンを正しいものとして示しています: http://1.latest.gaiagps.appspot.com/
何か助けはありますか?
Web サイトの新しいバージョンをプッシュしましたが、CSS と静的イメージが適切にデプロイされません。
これがめちゃくちゃなページです:http://www.gaiagps.com
ただし、Appengine は最新バージョンを正しいものとして示しています: http://1.latest.gaiagps.appspot.com/
何か助けはありますか?
/stylesheets/default.css?{{ App.Version }}
. _
これが私の(未確認の)理論です:
default
ます。default.css{{ App.Version }}
、まだそれを持っていない Google の CDN に送信されます。これが(これが起こった場合)発生した場合、ブラウザのキャッシュバスティングの作業が役に立たないことを確認できます. Google CDN サーバーが間違ったバージョンを保持しています。
修正するには: これを修正する唯一の方法は、別のバージョンをデプロイすることです。これが再び発生するリスクはありません (競合状態以降に CSS の変更を行っていない場合)。そのため、すべてのインスタンスが何があっても正しいバージョンを提供します。
以下は私のために働いたものです。
css ファイルを静的ドメインから提供します。これは GAE によって自動的に作成されます。
//static.{your-app-id}.appspot.com/{css-file-path}
アプリケーションをデプロイします。この時点で、アプリは壊れます。
cssファイルのバージョンを変更する
//static.{your-app-id}.appspot.com/{css-file-path}?v={version-Name}
再度デプロイします。
cssファイルを変更するたびに。2、3、4を繰り返す必要があります。
何かが欠けていない限り、あなたのリンクは私には問題ないように見えます。
古い CSS をキャッシュしていて、更新後に新しい CSS を取得していない可能性があります。ブラウザのキャッシュをクリアしてみて、それが機能するかどうかを確認してください。
1.latest に移動すると、新しい CSS がキャッシュにないためダウンロードされ、正しく表示されます。
shoreshが発見したように、Pyhton の標準環境のドキュメントでは、静的キャッシュの有効期限の設定、個々の要素expiration
とトップレベルの要素の両方が、「およびHTTPdefault_expiration
で送信される有効期限を定義する責任がある」と述べています。応答ヘッダー」。これは、「ファイルは、ユーザーのブラウザーだけでなく、インターネット サービス プロバイダーなどの中間キャッシュ プロキシ サーバーによってもキャッシュされる可能性が高い」ことを意味します。Cache-Control
Expires
ここでの問題は、「アプリの新しいバージョンを再デプロイしてもキャッシュがリセットされない」ことです。したがってdefault_expiration
、たとえば 15 日に設定した場合、CSS または JS ファイルに変更を加えてアプリを再デプロイすると、アクティブなキャッシュ、特に中間キャッシュが原因で、それらのファイルが自動的に提供されるという保証はありません。 Google Cloud サーバーを含む可能性のあるプロキシ サーバー - your-project-name.appspot.com にアクセスすると、古いファイルも提供されるため、これが当てはまるようです。
上記にリンクされている同じドキュメントには、「静的ファイルを変更する予定がある場合は、短い (1 時間未満の) 有効期限を持つ必要があります。ほとんどの場合、デフォルトの 10 分の有効期限が適切です」と記載されています。これは、静的キャッシュの有効期限を設定する前に考えておくべきことです。しかし、私のように、事前にこれらすべてを知らず、すでにこの問題に悩まされている人のために、解決策を見つけました。
ドキュメントには、これらの中間キャッシング プロキシをクリアすることはできないと記載されていますが、少なくとも Google Cloud キャッシュを削除することはできます。
そのためには、Google Cloud Consoleに移動してプロジェクトを開きます。左側のハンバーガー メニューで、[ストレージ] -> [ブラウザ] に移動します。そこには、少なくとも 1 つのバケット (your-project-name.appspot.com) が表示されます。[ライフサイクル] 列で、your-project-name.appspot.com に関するリンクをクリックします。これから作成するルールと競合する可能性があるため、既存のルールを削除します。
[ルールの追加] ボタンをクリックして、新しいルールを作成します。オブジェクトの条件は、「新しいバージョン」オプションのみを選択し、1 に設定します。「続行」ボタンをクリックすることを忘れないでください。アクションとして、[削除] を選択し、[続行] ボタンをクリックします。新しいルールを保存します。
この新しく作成されたルールが有効になるまで最大 24 時間かかりますが、少なくとも私のプロジェクトでは数分しかかかりませんでした. アプリが起動して実行されると、 your-project-name.appspot.com の下でアプリによって提供されるファイルのバージョンは常に最新のデプロイ済みになり、問題は解決します。また、静的ファイルを定期的に編集している場合は、default_expiration
要素を app.yaml ファイルから削除する必要があります。これにより、他のサーバーによる意図しないキャッシュを回避できます。
Pyhton の標準環境のドキュメントから: static_cache_expiration。
ファイルが所定の有効期限で送信された後は、通常、ユーザーが自分のブラウザー キャッシュをクリアしたとしても、中間キャッシュからそのファイルをクリアする方法はありません。アプリの新しいバージョンを再デプロイしても、キャッシュはリセットされません。したがって、静的ファイルを変更する場合は、有効期限を短く (1 時間未満) する必要があります。ほとんどの場合、デフォルトの 10 分の有効期限が適切です。
ブラウザのキャッシュをクリアしてみてください。まったく同じ問題があり、キャッシュをクリアするだけで修正されました。