54 votes

Comment éviter que des ressources précompilées soient utilisées en mode développement?

J'aime pas concaténer des Javascripts, le mode de développement, mais les servir en tant que fichiers individuels. J'ai donc configuré:

développement.rb:

config.assets.compress = false
config.assets.debug = true
config.assets.compile = true

Dans mon /app/assets/javascript répertoire que j'ai:

  • reviews.js
  • examens/
    • foo.js
    • bar.js

reviews.js:

//= require jquery
//= require jquery_ujs
//= require_tree ./reviews

- Je inclure le javacripts l'aide d' <%= javascript_include_tag "reviews" %> dans ma mise en page. La page générée correctement les références les trois scripts individuellement et reviews.js est essentiellement vide. So far So good.

Maintenant, quand je précompiler mes actifs pour la production à l'aide de rake assets:precompile les trois les fichiers javascript sont concaténés en reviews.js. C'est bien beau pour la production, mais maintenant, le mode de développement, la concaténation reviews.js est servi en outre aux deux fichiers.

Bien sûr, cela conduit à toutes sortes de méchants bugs lors de l'élaboration, parce que maintenant, le contenu de foo.js et bar.js est servi deux fois, l'un d'eux dans un potentiellement ancienne version en reviews.js.

Comment m'assurer que les Rails ne pas utiliser le fichier actif, le mode de développement?

80voto

Haim Lankry Points 621

En config/environments/development.rb défini:

 config.assets.prefix = "/assets_dev"
 

de sorte qu'en mode de développement , Rails regardera là (mais il ne trouvera rien, car vous ne compilerez pas d'actifs en développement (c'est bien ce que vous essayez de faire - pas de compiler des actifs)).

Lors de la précompilation pour la production , utilisez

 RAILS_ENV=production rake assets:precompile
 

il est donc compilé dans le dossier des actifs par défaut, public/assets .

53voto

Richard Hulse Points 7610

On dirait que vous êtes la précompilation localement. Parce que les fichiers existent dans l'emplacement prévu qu'ils sont servis par votre serveur de dev, et les demandes ne vont pas à Pignons.

Le seul moyen d'arrêter cela est de supprimer les fichiers compilés.

Normalement, vous n'avez pas besoin de compiler en local. Il est prévu que, dans presque tous les cas, le précompiler tâche sera exécutée lors du déploiement de l'application. Il y a un Capistrano recette pour l'asset pipeline page du guide.

Si vous avez besoin d'avoir ces fichiers localement commis à votre pension, vous pouvez utiliser une branche pour éviter le problème. Réservez votre branche master pour la production de code, et de faire une deuxième branche de dev. Seulement de compiler et de s'engager sur le master. Lorsque vous passez en dev, ils auront disparu. Fusion dev en maître, comme requis.

Edit: assurez-vous de forcer votre navigateur à jour (ctrl + F5) ou vous pouvez trouver les anciens actifs utilisés à partir de la mémoire cache du navigateur!

17voto

Peter Madsen Points 246

en config/environments/development.rb défini:

 config.serve_static_assets = false
 

et aucun fichier de /public ne sera servi

1voto

Uchenna Okafor Points 1557

Je l'ai essayé et ça marche. rake assets:precompile RAILS_ENV=production

J'ai constaté que la nouvelle version du pipeline d'actifs remplit cette fonction lorsque vous exécutez rake assets:precompile fait rake assets:precompile:all

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X