Effacer le cache de l'Rails asset pipeline
Je commence un nouveau projet dans les Rails, et il semble que l'application.js fichier manifeste est en train de faire quelque chose d'amusant avec les javascripts que j'référence - t-il cache ces fichiers dans le cadre de l'asset pipeline?
Voici ce qui s'est passé. J'ai ajouté un fichier javascript nommé jquery.autoresize.js pour le vendeur/assets/scripts javascript dossier, et ensuite référencé le fichier dans le application.js manifeste comme ceci:
//= require jquery.autoresize.js
Puis j'ai commencé le serveur rails. Mais après avoir navigué autour de mon application, j'ai réalisé que j'avais accidentellement ajouté la mauvaise version de la jquery.autoresize.js fichier. Donc, j'ai supprimé ce fichier, puis ajout de la version correcte de l'vendor/assets/scripts javascript dossier. Mais, à ma grande horreur, quand j'ai rechargé la page, il est toujours en train de charger l'ancien fichier javascript.
J'ai essayé de vider mon cache du navigateur, puis quitter et redémarrer le serveur Rails, mais en vain. J'ai piraté une solution ensemble par tout simplement de renommer mon fichier javascript et référencement d'un nom nouveau, qui a bien fonctionné. Mais il y a obtenu d'être une meilleure solution.
La nouvelle asset pipeline de mettre en cache les fichiers de référence en quelque sorte? Si oui, comment puis-je effacer ce cache? Merci pour toute aide!
- Je ne peux pas croire que j'ai perdu plus d'une heure sur ce point. Qu'enfin, il fixe pour moi a été la réinitialisation de la cache du navigateur! Chrome > Effacer les Données de Navigation " > mise en Cache des Images & Fichiers
Vous devez vous connecter pour publier un commentaire.
Je suis en supposant que nous parlons de l'environnement de production.
Lorsque vous modifiez l'un de vos scripts javascript ou des feuilles de style dans l'environnement de production, vous devez exécuter
rake assets:precompile
; cette tâche compile et comprime le divers .js et .les fichiers css et crée la application.js et de l'application.les fichiers css qui est chargé par votre point de vue.Il est possible que si vous avez remplacé
jquery.autoresize.js
avec une version avec un âgées timestamp, le précompiler étape peut l'ignorer en pensant que la version compilée est à jour. Vous pouvez éviter cela en exécutantrake assets:clean
d'abord, la forçant à tout reconstruire dans lapublic/assets
répertoire à partir de zéro.Aussi essayer
rake assets:clobber
. Ce sera totalement tout réinitialiser et supprimer tout compilé actifs. En plus, j'ai souvent besoin de définir l'environnement avant de le pousser à la production en passant:RAILS_ENV=production rake assets:precompile
.Rails efface automatiquement le cache pour un fichier individuel à chaque fois que le contenu de l'édition. Pour effacer le cache pour un seul fichier, il suffit d'ouvrir le fichier, de modifier une ligne de code, et les ré-enregistrer. Rails de vider le cache pour ce fichier, et le navigateur va charger le nouveau fichier la prochaine fois que la page est chargée.
La raison jquery.autoresize.js a l'aide de l'ancienne version en cache du fichier est parce que l'ancienne version a été supprimé et puis la nouvelle version a été copié et collé avec le même nom dans le même dossier. Parce que le fichier lui-même n'a jamais été modifié, les Rails continue à utiliser l'ancien fichier qui a été mis en cache.
C'est parce que l'asset pipeline utilise les empreintes de la mémoire cache.
Donc, si vous supprimez un fichier, vous faites référence dans le manifeste, et ensuite de copier un nouveau fichier avec le même nom, le contournement du cache ne se produit jamais. Lorsque vous modifiez le fichier, le fichier d'empreintes digitales des coups de pied dans, et une nouvelle table de hachage est généré pour le nom de fichier. Cette bustes le cache pour ce fichier.
Pour l'histoire complète, voir Qu'est-ce que des Empreintes et Pourquoi Devrais-je m'en soucier?.
rake assets:precompile
de mettre les fichiers dans lepublic/assets
répertoire; qui devrait être la solution, sauf si vous avez modifié la configuration par défaut.rake assets:clean
, puisrake assets:precompile
, ainsi que de copier le nouveau fichier et redémarrer le serveur. Rien n'a fonctionné jusqu'à ce que j'ouvre le nouveau fichier ajouté un peu factice de mots à la fin, puis supprimés et enregistré le fichier. Rails est en train de devenir trop complexe pour son propre bien - vous savez que c'est le cas lorsque les choses simples nécessitent des étapes à faire.touch
sur le fichier pour mettre à jour l'horodatage sur elle. Vous pouvez voir si c'est le problème en exécutantls -l
et de la vérification de la date de modification.application.css
inclure un fichier unique (avec pignons'*= require
syntaxe) qui contient d'autres fichiers à l'aide de la boussole est@import
. Modifier les fichiers ci-dessous les@import
utilisé pour arranger les choses mais après un précompiler en dev une fois qu'il a commencé à retourner la mise en cache version compilée. J'ai fixé ce par modificationapplication.css
et rerequesting. Que éclaté le cache et maintenant, il recharge correctement.rake tmp:clear
n'a rien fait, j'ai vraiment eu pour ajouter une ligne vide dans le fichier afin de le faire fonctionner.rake tmp:clear
a fait le tour pour moi, je suis en utilisant moins rails.rails assets:clean
ne fonctionne pas pour cette.- Je utiliser
config.assets.version = '1.01019'
dans monapplication.rb
le buste de l'intégralité du cache. Quand j'ai envie de pousser une toute nouvelle version, je l'incrémentation de la version et qui fait le tour. Cela prend en charge de ces cas limites, Rails de ne pas recompiler un atout pour quelque raison que ce soit.