[RoR]Afbeeldingen (zoals background) cachen met timestamp

Pagina: 1
Acties:

Onderwerpen


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 19-09 16:12
Ik ben bezig met een ruby on rails applicatie. Daarbij heb ik 1 probleempje. Ik gebruikt Heroku (http://heroku.com) als host. Deze hanteert zeer strikte caching, een dag o.i.d. voor statische files.

Prima aangezien RoR als je netjes werkt achter elke statische file een ?323232 timestamp plaatst en ieder geupdate bestand dus als nieuw gezien wordt.

De vraag: Hoe krijg ik dit voor elkaar in CSS files? Dus: background-image: background.png; Hoe krijg ik daar die timestamp achter zodat ik bij een update ook echt alles update?

Ik heb al zitten kijken naar een soort parser om een CSS file eerst om te zetten (eenmalig) aangezien een dynamische CSS file ook niet echt gewenst is?


Ter info, zo cachen ze: http://docs.heroku.com/http-caching

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Waarom mag je CSS background niet gecached worden? En waarom mogen je statische files uberhaupt niet gecached worden?

Heroku weet toch ook wanneer de bestanden veranderen, en zal dan toch (hopelijk) de juiste headers meesturen.

Going for adventure, lots of sun and a convertible! | GMT-8


  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Cachen is niet evil, al is het (vaak) wat onhandig bij het ontwikkelen.
Lees anders dit artikel door, hier staat veel info over Cachen in!

Freelance Unity3D developer


Acties:
  • 0 Henk 'm!

  • THAiSi
  • Registratie: Juli 2001
  • Laatst online: 06-12-2020

THAiSi

bonzai

als je weet dat een background redelijk wat kan wijzigen, kan je deze definitie dan niet in de layout file zetten? dus daar een <style> blok met daarin de selector en de background image, inclusief timestamp

Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 21:50
Je kan toch ook iedere keer bij een wijziging van de background de bestandsnaam op het filesystem en in de CSS wijzigen?

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 19-09 16:12
CyCloneNL schreef op donderdag 11 februari 2010 @ 09:53:
Cachen is niet evil, al is het (vaak) wat onhandig bij het ontwikkelen.
Lees anders dit artikel door, hier staat veel info over Cachen in!
Ben er absoluut voorstander van maar als ik een nieuwe layout wil deployen dan moet dit wel gedaan zijn. Anders loopt een gebruiker het risico een halve layout te ontvangen.

Acties:
  • 0 Henk 'm!

  • Passenger
  • Registratie: Januari 2000
  • Laatst online: 25-08 00:25
Het is eigenlijk niet op te lossen met standaard tools. Je kunt handmatig in je css file een timestamp meegeven aan je background image, maar ik kan me goed voorstellen dat dat niet de oplossing is waar je op zit te wachten.

Of je moet dynamisch css gaan genereren, maar dat zou ik niet zelf bouwen als ik jou was ;) Kijk eens naar Sass (http://sass-lang.com) en Compass (http://compass-style.org). Compass implementeert een aantal extensies bovenop Sass, zoals bijvoorbeeld precies hetgene waar je naar op zoek bent.

Bij de definitie van je background-image gebruik je dan:
Sass:
1
:background-image = image_url('foobar.png')


Wat resulteert in de volgende css:
Cascading Stylesheet:
1
background-image: url(../images/foobar.png?123456789)

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 22:44

MBV

Je zit dus met het moment van overschakelen van je CSS layout? Even simpel denken:
- zet je nieuwe css-images in /layout_new
- zet je nieuwe layout in layout_new.css
- op de grote dag include je layout_new.css in je HTML/ruby-files ipv de oude layout.css

En als je layout_new niet leuk vindt, kan je na een week alles terugzetten naar de naam die je wel leuk vindt :)

Als je heel vaak je layout wijzigt kan je het anders doen: genereer je CSS-file dynamisch, met daarin dynamisch de timestamps. Goeie headers meegeven met een zinnige cache-timeout (ik ken een site waar dat de helft van de traffic scheelde :X), en klaar :)

[ Voor 25% gewijzigd door MBV op 21-02-2010 13:09 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 19-09 16:12
Dat idee van de nieuwe map klinkt scherp! Ik moet een beetje oppassen met mijn slugsize (complete grootte van je code incl. statische files) i.v.m. cloudbased hosting maar ik kan de oude afbeeldingsmappen waarschijnlijk gewoon laten vervallen. Dat is zo gedaan met gitignore.
Pagina: 1