web-dev-qa-db-fra.com

Rails 3.1 Assets - Strange Serving in Development

J'ai un problème avec le pipeline d'actifs Rails 3.1. Les actifs sont inclus deux fois dans le développement:

<script src="/assets/main_new.js?body=1" type="text/javascript"></script>
<script src="/assets/pagenav.js?body=1" type="text/javascript"></script>
<script src="/assets/tours.controller.js?body=1" type="text/javascript"></script>
<script src="/assets/tours.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>

Rails compile en quelque sorte et inclut application.js afin que tous les scripts soient inclus deux fois - sous forme de fichier individuel et dans application.js

Tout va bien avec les actifs précompilés en production.

development.rb

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

production.rb

# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false

# Compress both stylesheets and JavaScripts
config.assets.compress = true
config.assets.js_compressor  = :uglifier
config.assets.css_compressor = :scss

config.assets.compile = false
config.assets.digest = true

application.rb

config.assets.enabled = true
36
Fenelon

Essayez d’ajouter ce qui suit à development.rb:

config.serve_static_assets = false

... puis effacez le cache de votre navigateur ( mettez à jour en fonction des commentaires )

Les actifs statiques font référence aux actifs précompilés dans public/assets, c'est là que rake assets:precompile les met.

Ce qui se passe, c'est que tout ce qui existe dans le public/les actifs remplacera tout ce qui se trouve dans l'application/les actifs si vous les servez. Donc, public/assets/application.js est en cours de chargement lorsque la balise js a pour but d'identifier l'identifiant app/assets/application.js.

39
Ethan McCutchen

Une fois que vous vous êtes débarrassé de/public/assets, vous devez également vider le cache du navigateur.

12
Effisfor

Cela vient de me causer un problème. La définition de ce qui suit permet à l'application de fonctionner, mais inclut le fichier unique application.js, ce que je ne souhaite pas utiliser en développement:

config.serve_static_assets = false

J'avais pré-compilé mes actifs précédemment (semble être la cause). 

Pour résoudre ce problème, j'ai fait ce qui suit:

  • Supprimez le répertoire public/assets ajouté par la précompilation précédente.
  • Exécutez Rails_ENV=development rake assets:clean pour effacer tmp/assets
  • App/assets/application.js modifiés

C’est seulement après avoir modifié application.js qu’il s’est égaré puis corrigé que le fichier applciation.js inclus dans les pages n’était pas le fichier application.js précompilé complet.

Je ne sais pas si tout cela doit être fait. Je redémarrais également mon serveur en cours de route. 

8
Peter

Vous avez été déclenché par ceci (encore une fois), - n'oubliez pas d'ajouter une ligne blanche après toutes vos directives //= require à la fin de votre application.js

4
tw airball

J'ajoute le même problème avec moins de fichiers.

Ici depuis la documentation :

En mode de développement, les actifs sont servis en tant que fichiers distincts dans l'ordre , ils sont spécifiés dans le fichier manifeste.

Ma solution consistait à supprimer la ligne *= require_tree . de application.css.less et à n'utiliser que @import "my-styles"; de moins.

Peut-être que vous pouvez trouver une solution similaire avec JavaScript ...

0
Charles