26

Web サイトの新しいバージョンをプッシュしましたが、CSS と静的イメージが適切にデプロイされません。

これがめちゃくちゃなページです:http://www.gaiagps.com

ただし、Appengine は最新バージョンを正しいものとして示しています: http://1.latest.gaiagps.appspot.com/

何か助けはありますか?

4

12 に答える 12

28

/stylesheets/default.css?{{ App.Version }}. _

これが私の(未確認の)理論です:

  1. 新しいバージョンを にデプロイまたは変更して、新しいバージョンをプッシュしdefaultます。
  2. この更新は、アプリを実行しているすべての GAE インスタンスに反映されています...
  3. ...誰かがあなたのサイトにアクセスします。
  4. 静的リソースのリクエストはdefault.css{{ App.Version }}、まだそれを持っていない Google の CDN に送信されます。
  5. ステップ 2 からの伝播がすべてのインスタンスに対して行われる前に、Google の CDN は GAE にリソースを要求します。
  6. 運が悪いと、GAE は古いバージョンを実行しているインスタンスからリソースを提供します...
  7. ...これは、信頼できる「新しい」バージョンとして Google の CDN にキャッシュされます。

これが(これが起こった場合)発生した場合、ブラウザのキャッシュバスティングの作業が役に立たないことを確認できます. Google CDN サーバーが間違ったバージョンを保持しています。

修正するには: これを修正する唯一の方法は、別のバージョンをデプロイすることです。これが再び発生するリスクはありません (競合状態以降に CSS の変更を行っていない場合)。そのため、すべてのインスタンスが何があっても正しいバージョンを提供します。

于 2011-01-29T17:35:03.873 に答える
3

以下は私のために働いたものです。

  1. css ファイルを静的ドメインから提供します。これは GAE によって自動的に作成されます。

    //static.{your-app-id}.appspot.com/{css-file-path}

  2. アプリケーションをデプロイします。この時点で、アプリは壊れます。

  3. cssファイルのバージョンを変更する

    //static.{your-app-id}.appspot.com/{css-file-path}?v={version-Name}

  4. 再度デプロイします。

cssファイルを変更するたびに。2、3、4を繰り返す必要があります。

于 2012-01-14T20:05:45.667 に答える
2

何かが欠けていない限り、あなたのリンクは私には問題ないように見えます。

古い CSS をキャッシュしていて、更新後に新しい CSS を取得していない可能性があります。ブラウザのキャッシュをクリアしてみて、それが機能するかどうかを確認してください。

1.latest に移動すると、新しい CSS がキャッシュにないためダウンロードされ、正しく表示されます。

于 2010-05-06T17:26:14.863 に答える
2

shoreshが発見したように、Pyhton の標準環境のドキュメントでは、静的キャッシュの有効期限の設定、個々の要素expirationとトップレベルの要素の両方が、「およびHTTPdefault_expirationで送信される有効期限を定義する責任がある」と述べています。応答ヘッダー」。これは、「ファイルは、ユーザーのブラウザーだけでなく、インターネット サービス プロバイダーなどの中間キャッシュ プロキシ サーバーによってもキャッシュされる可能性が高い」ことを意味します。Cache-ControlExpires

ここでの問題は、「アプリの新しいバージョンを再デプロイしてもキャッシュがリセットされない」ことですしたがって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 ファイルから削除する必要があります。これにより、他のサーバーによる意図しないキャッシュを回避できます。

于 2018-10-26T21:40:42.227 に答える
0

Pyhton の標準環境のドキュメントから: static_cache_expiration

ファイルが所定の有効期限で送信された後は、通常、ユーザーが自分のブラウザー キャッシュをクリアしたとしても、中間キャッシュからそのファイルをクリアする方法はありません。アプリの新しいバージョンを再デプロイしても、キャッシュはリセットされません。したがって、静的ファイルを変更する場合は、有効期限を短く (1 時間未満) する必要があります。ほとんどの場合、デフォルトの 10 分の有効期限が適切です。

于 2018-07-31T19:04:57.553 に答える
-1

ブラウザのキャッシュをクリアしてみてください。まったく同じ問題があり、キャッシュをクリアするだけで修正されました。

于 2012-12-06T12:24:59.200 に答える