2

Herokuでホストされているdjango1.4サイトに問題があります。テンプレートや静的アセットキャッシュなど、さまざまなキャッシュにMemcacheを使用しています。[更新:djangoのドキュメントによると、djangoはテンプレートローダーキャッシュにmemcacheを使用していないようです]

サイトをherokuにプッシュすると、静的cssファイルへのリンクがキャッシュがクリアされるまで更新されないことがあります(手動で、または数分後にそれを離れると自動的に修正されるように見えるため、タイムアウトになると推測しています) 1人)。

したがって、私のHTMLは新しいバージョンであり、キャッシュが更新されてURLが新しいcssファイルに変更されるまで、私のcssは古いバージョンになるため、これは受け入れられません。

例:

このサイトにはhtml(これをv1と呼びます)があり、application.5e6e7ad87005.cssのようなcssファイルにリンクしています。

application.cssファイルに変更を加えて、サイトをプッシュします。これにより、新しいcssファイル名がstaticfilesのものによって生成されます。たとえば、application.5e6e7ad87006.css

問題は、私のhtmlページでは、それらがすべて古いファイル(application.5e6e7ad87005.css)にリンクしていることです。

他のキャッシュを失わないように、キャッシュされたファイル名のみのキャッシュをクリアしたいと思います(少なくとも、これが問題であると想定しています。これが別の問題であると誰かが考えた場合は、お知らせください)。 (テンプレートキャッシュ、クエリキャッシュなど)

検索から、個々のキャッシュではなく、一度にすべてのキャッシュをクリアすることしかできないようです。

4

2 に答える 2

1

それはすべて、テンプレートに使用しているキャッシュ戦略によって異なります。各テンプレートとレンダリングされたページ全体をキャッシュしていますか?

その場合は、代わりにテンプレートフラグメントキャッシュを使用することをお勧めします。アイデアは、レンダリングに本当に費用がかかる各テンプレートの特定の部分のみをキャッシュするということです。cssファイルへのリンクなど、レンダリングが高速であると思われる部分はキャッシュしません。

django-compressorも調べることをお勧めします。これは、CSS / JSファイルをその場で縮小することと、それらのファイルの最新バージョンが体系的に使用されることを確認することの両方で素晴らしい仕事をします(これらのファイルへのリンクをキャッシュしていない場合)もちろん、ファイル)。

于 2013-01-09T07:43:05.637 に答える
0

この場合、それheroku config:add ...はあなたの友達だと思います。

例:最新のアプリをプッシュするbashスクリプトを作成し、そうすると、次のように起動しますheroku config:add GIT_LAST_COMMIT=$(git rev-parse HEAD)

次に、Pythonコードで、を使用してその変数を参照できますos.environ['GIT_LAST_COMMIT']

たとえば、これが私のHerokuアプリです:http ://stormy-badlands-7331.herokuapp.com/

のコードapp.pyは次のとおりです。

import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
  return 'Hello World! The latest commit sha is %s' % os.environ['GIT_LAST_COMMIT']

if __name__ == '__main__':
  # Bind to PORT if defined, otherwise default to 5000.
  port = int(os.environ.get('PORT', 5000))
  app.run(host='0.0.0.0', port=port)

そして私deploy.shは:

git push heroku master
heroku config:add GIT_LAST_COMMIT=$(git rev-parse HEAD)

プッシュした後に変数を更新することに注意してください。これにより、ユーザーが新しいハッシュで古いアセットを提供されないようにします。

次に、これを取得して、たとえばアセットをロードするときにvaros.environ['GIT_LAST_COMMIT']として使用できます。x

<link rel="stylesheet" type="text/css" href="/assets/css/styles.css?{{ git_last_commit}}" />
于 2013-01-09T09:30:44.653 に答える