Web releases si cache busting

Am o mica problema facand web release-uri, caching imi da dureri de cap. In particular, imediat dupa un release, toata lumea care are versiunea veche cached va primi erori.

E cineva care a trecut prin asa ceva? Cum ati rezolvat? Ce recomandati?

Te poți inspira de la Capistrano.

Presupunând că ai assets în www/my-site/assets/, poți proceda așa:

  1. faci upload normal, în www/my-site/assets/;
  • faci un symlink: ln -s www/my-site/assets www/my-site/assets-d929831
  • din html incluzi assets din doul director: <script src="www/my-site/assets-d929831/app.js" type="text/javascript"></script>

Evident, presupunem că ai expire-time îndepărtat la fișierele statice și deloc (sau foarte mic) la paginile generate.

Nu prea inteleg cum merge :frowning:

Ce se intampla cu assets-d929831 cand faci un release nou?

Problema e ca avem cache foarte mic pentru index.html dar chiar si asa tot avem cereri pentru assets care nu mai exista.

Exemplu:

  1. index.html cere assets-d929831/script.js
  2. avem un release, assets-d929831 e sters si inlocuit cu assets-1111
  3. index.html cached nu mai merge. (desi merge dupa ce expira sau daca faci hard refresh)

Problema e amplificata din cauza ca avem release frecvent si avem probleme de genu tot timpul (“Did you try clearing your cache?”)

Ștergi symlink-ul :smile:

Dacă aveți release frecvent atunci nu mai faceți cache deloc la html.

Ar merge…

Oricat cat de bine ar functiona “sa nu mai faci cache”, asta nu e o solutie pentru “cache invalidation”.

Creearea unei chei noi la fiecare versiune si folosirea ei pentru oriec cache, este suficienta.

O alta idee ar fi sa faci redirect din Apache sau Nginx, ceva gen /assets/:version/file => /assets/file. Astfel chiar nu te-ar mai interesa nimic :smiley:

Da stiu, e ultima varianta.