2 votes

Précompilation des ressources du contrôleur dans rails 3.2

J'ai un fichier scss distinct pour chaque contrôleur et je ne les importe pas tous dans le fichier application.css afin de pouvoir inclure la feuille de style et le fichier js spécifiques au contrôleur dans la mise en page.

Donc, dans la mise en page, je le fais :

<%= stylesheet_link_tag "application" %>
<%= stylesheet_link_tag params[:controller], :media => "all" %>
<%= javascript_include_tag 'application' %>
<%= javascript_include_tag params[:controller] %>

Mais lorsque j'exécute rake assets:precompile, je n'obtiens pas de ressources compilées pour les contrôleurs.

J'ai cherché des solutions sur le web, mais elles indiquaient toutes d'ajouter les fichiers nécessaires au staitment config.assets.precompile. Et je ne sais pas quoi mettre là pour que tous les actifs dans les sous-dossiers de app/assets/stylesheets et les sous-dossiers de app/assets/javascripts soient compilés automatiquement.

MISE À JOUR 1

OK, je vais les compiler dans un seul fichier, mais il y a deux problèmes :

  1. J'ai un fichier _base.scss contenant toutes les variables et importations nécessaires, et j'ai renommé application.css en application.css.scss afin de pouvoir importer ce fichier avant tout le reste :

    @import 'base';
    @import 'style';
    @import 'forms';

Comment dois-je procéder avec un manifeste ? Je n'ai pas trouvé de moyen d'importer le répertoire entier avec scss lui-même.

  1. J'ai des actions différentes pour les mêmes sélecteurs dans différents contrôleurs. Quel est le moyen le plus simple de séparer ces actions et de définir ce qui doit être traité sur une page particulière ?

2voto

iggbs Points 90

Solution :

au fichier config/application.rb

ajouter cette ligne :

config.assets.precompile += ["controller1.js", "controller1.css", "controller2.js", "controller3.js"]

et la prochaine fois que vous lancerez assets:precompile, il compilera aussi ces fichiers

0voto

sevenseacat Points 12086

C'est une mauvaise idée car cela ajoute des requêtes HTTP supplémentaires à chaque chargement de page, nécessite beaucoup de fichiers supplémentaires (dont la plupart seront vides, il y aura rarement du CSS/JS spécifique au contrôleur), et ignore la mise en cache du navigateur (mettez en cache l'application.css/js une fois et oubliez-la).

Il est préférable d'écrire vos CSS/JS de manière à pouvoir les inclure tous ensemble et utiliser correctement le pipeline d'actifs.

0voto

Pavel K. Points 2043

Que diriez-vous de quelque chose comme :

config.assets.precompile += Dir::entries("app/assets/javascripts").
                               map{|f| f[/^(?!application\.).*\.js/]}.compact

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