10
votes

Timbres-timbres sur les images dans CSS

SO RAILS Time Stamping est génial. J'utilise pour ajouter des en-têtes expire à tous les fichiers qui se terminent dans l'horodatage à 10 chiffres. La plupart de mes images sont cependant référencées dans mon CSS. Quelqu'un a-t-il rencontré n'importe quelle méthode qui permet d'ajouter des horodatages à des images référencées CSS ou de la règle de ré-écriture funky qui atteint cela? J'adorerais pour toutes les images de mon site, à la fois en ligne et en CSS d'avoir cet horodatage afin que je puisse dire au navigateur de les mettre en cache, mais rafraîchissez chaque fois que le fichier change lui-même.

Je n'ai trouvé rien sur le net à ce sujet et je ne peux pas croire que ce n'est pas un sujet plus fréquemment discuté.

Je ne pense pas que ma configuration comptera parce que l'expiration réelle espérons-le-dire se produira de la même manière, basée sur l'horodatage à 10 chiffres, mais j'utilise Apache pour servir tout le contenu statique si cela Questions


1 commentaires

Voir ma réponse ci-dessous, je pense que la meilleure solution maintenant à utiliser Jammit, pour emballage qui le supporte hors de la boîte.


4 Réponses :


5
votes

J'utilise Asset Packager , et j'ai fini par éditer le plugin compress_css méthode pour résoudre ce problème. Fondamentalement, je viens de regex pour des images dans la CSS et insérez l'horodatage actuel: xxx

de cette façon, chaque fois que je déploie, les images CSS compressées contiennent des horodatages annexées. La chute de cette méthode est que chaque image ne reçoit pas son propre horodatage, donc chaque fois que vous déployez de nouveaux CSS, toutes les images CSS sont «expirées». Mieux que rien que si vous ne déployez souvent CSS.


1 commentaires

Intéressant, bien que je suis vraiment d'accord, c'est moins qu'idéal d'avoir le seul horaire vs chaque fichier ayant son propre horodatage approprié, mais je suppose que cela vaut mieux que rien. Thx pour la pointe.



4
votes

Vous pouvez ajouter l'horodatage réel de chaque fichier image en obtenant le temps de modification de fichier comme celui-ci:

    source.gsub!(/url\((['"]*)(.+)(['"]*)\)/) do
      open, file, close = $1, $2, $3
      css_dir = File.join(RAILS_ROOT,"public/stylesheets")
      timestamp = ''
      FileUtils.cd(css_dir) do 
        if file =~ /^\// # absolute path
          f = File.new(RAILS_ROOT + "/public" + file)
        else # relative path
          f = File.new(file)
        end
        timestamp = f.mtime.to_i.to_s
      end

      if file =~ /.\.(ico|css|js|gif|jpe?g|png)/
        "url(#{open}#{file}?#{timestamp}#{close})"
      else
        "url(#{open}#{file}#{close})"
      end
    end


1 commentaires

Votre expression régulière n'a pas vraiment travaillé pour moi lorsque des citations étaient autour. Utilisation de / url \ ((['"] *) ([^ \ n'"] +) (['"] *) \) / fonctionne



3
votes

La meilleure solution semble être d'utiliser ERB pour générer vos feuilles de style afin que vous puissiez utiliser les rails Image_ Aidateurs au lieu de chemins d'image directe. Signification, Débarrassez-vous de votre fichier public / style / application.css et créez une application / vues / stylesheets / applications.cs.erb. Vous devrez également créer un contrôleur et activer la mise en cache et configurer l'itinéraire.

Voici tous les détails: HTTP: // DeadDeadBood. COM / 2009/9/28 / FAR-FULL-EXPRIE-EXPRIE-HEBORDS-FOR-CSS-Images-in-Rails


1 commentaires

parfait! Exactement ce que je cherche. Sur une note latérale, je viens de commencer à lire sur Jammit documentCloud.github.com/jammit . On dirait une très bonne solution pour les emballages d'actifs dans les rails!



3
votes

Si quiconque trébuche sur ceci, Jammit le prend en charge maintenant hors de la boîte. J'utilise Jammit sur un nouveau projet et je suis incroyablement impressionné!


0 commentaires