Déployer rapidement une configuration ou une fonctionnalité

Version imprimableEnvoyer à un ami

Bonsoir,

J'ai consacré un peu de temps ces deux dernières semaines à étudier de plus près plusieurs modules assez semblables dans leur finalité, et comme nyl auster m'avait demandé - et que je le lui avais promis - de lui faire un "retour", je m'acquitte de ma promesse.

Quand on commence à devoir construire plusieurs sites Drupal, il devient rapidement évident qu'on passe beaucoup de temps à cliquer partout pour obtenir quelque chose qui tienne la route. La distribution de base de Drupal est vraiment très très basique et on est contraint à bien des manipulations pour construire le site de ses rêves. Le plus pénible est probablement qu'une grande partie de ce travail est très répétitif d'un site à l'autre.

C'est la raison pour laquelle se sont multipliées des solutions qui permettent d'automatiser certaines tâches de configuration, et/ou de reproduire facilement des morceaux de site d'un site à l'autre. C'est par exemple ce que permettent les profils d'installation, qui sont en quelque sorte des distributions "avancées" de Drupal (on les trouve ici). Au lieu de charger seulement le core, on est invité à charger d'office quelques modules additionnels ; au moment de l'installation, on choisit le "profil" en question au lieu de choisir le profil d'installation par défaut. Le script d'installation exécute alors, en plus de l'installation normale, des actions spécifiques, comme la création de types de contenus supplémentaires par exemple. Au lieu d'aboutir à un site "tout nu", on tombe donc dans un site déjà prêt pour un emploi déterminé.

C'est donc un bon moyen de gagner du temps, mais je vois deux limites : comme son nom l'indique, le profil d'installation ne s'exécute qu'à l'installation ; et à ma connaissance la mise en place d'une langue étrangère étant elle-même, en fait, un profil, on ne peut exécuter un profil d'installation que dans une version anglaise de Drupal. (Sauf erreur de ma part). Je ne crois pas qu'il existe à ce jour des profils d'installation francophones.

Plusieurs modules prévoient par ailleurs des fonctions d'import/export : le CCK voyage avec Content Copy, Views avec Views Exporter. Des "Node import", "Import Nodes", "Node export" etc. existent aussi. Mais ces modules sont limités à un aspect du site et ne considèrent pas une configuration globale.

Features, Patterns ou Deployment sont des solutions possibles. Nyl auster m'avait demandé de comparer Patterns à Features, qu'il connait bien, mais en fait la comparaison est assez malaisée car ils sont relativement différents dans leur logique. Patterns est plus proche de Deployment à mon sens. Pour tout dire, la logique de Features ne me convient pas vraiment, du moins ne convient pas aux exigences qui me sont imposées dans mon utilisation (professionnelle) de Drupal.

Features permet d'exporter une fonctionnalité avancée (combinaison de plusieurs modules) sous la forme d'un module spécifique. En d'autres termes, c'est un genre de "constructeur de modules". Un module qui permet d'en créer un depuis l'administration de Drupal, sans avoir besoin de le coder. Un peu comme Panels permet de personnaliser l'affichage sans avoir besoin de coder son thème. Je conçois que ce soit très pratique (gain de temps, facilité) mais je me pose des questions. Un bon module est celui qui dépend du moins de modules possible ; on ne peut pas toujours éviter certaines dépendances, mais pourquoi en ajouter une dont on pourrait se passer en codant le module (ou en codant un pattern, voir plus bas) ? Features est pris en charge par une société (development seed) mais cela fait tout de même une dépendance de plus. Mais, encore une fois, je raisonne par rapport à des exigences techniques qui ne sont pas celles d'un développeur ; j'ai l'impératif absolu de rendre un site, tel que nous les projetons, le moins dépendant possible aux modules additionnels. De m'écarter le moins possible du core.

Par ailleurs, Features ne permet pas d'agir sur les variables système du site, et de cela j'ai besoin. Il ne peut pas non plus importer du contenu ou des vocabulaires de taxonomie.

Pour ces raisons, Patterns et Deployment m'intéressent beaucoup plus. Une fois le pattern ou le deployment plan exécuté, on peut éteindre le module ; la configuration produite reste présente. Par comparaison, un type de contenu importé via une Feature disparait du site si l'on désactive la Feature (et a fortiori le module lui-même), tandis qu'injecté via un pattern il continue d'exister si l'on désactive le module Patterns. Il me semble en outre que le rayon d'action de Patterns est plus large (on peut créer des menus et des items de menus, des vocabulaires et des termes de taxonomie, des rôles et des utilisateurs, etc.).

La limite qui se pose ici réside dans l'environnement du module ; il est difficile de savoir où en sont les développeurs. Le module est toujours en version de développement pour Drupal 6, et la documentation n'est pas complète. Cependant, une fois la syntaxe XML ou YAML d'un pattern comprise, on peut envisager beaucoup de choses avec ce module.

Deployment est assez proche de Patterns mais le passage d'un site à l'autre (export de la configuration et import dans l'autre site) est plus facile (clic j'ajoute ces paramètres dans mon plan et clic je pousse mon plan). Je suis très embêtée par l'absence d'un views_deploy.module mais il permet d'exporter de nombreux paramètres, des types de contenus, vraiment facilement. Disons que c'est une solution pratique si vous envisagez de piloter un site depuis un autre. L'ensemble Deployment + Services requis pour l'exécution d'un deployment plan représente un grand nombre de modules (une vingtaine), mais il ne sont pas nécessaires à long terme si vous n'avez plus besoin de changer la configuration générale du site destination.

Au final, chacune de ces solutions présente des avantages et des inconvénients qui rendront l'une plus pratique dans telle situation, l'autre plus adaptée à tel usage. Je voulais finir en élargissant la réflexion sur l'import/export/partage de configuration ou fonctionnalités, mais j'ai déjà été longue, j'ai oublié une réunion à laquelle je devais aller ce soir, et je dois dîner. Rendez-vous donc dans quelques jours pour un nouveau billet ...

citation : "Features permet

citation : "Features permet d'exporter une fonctionnalité avancée (combinaison de plusieurs modules) sous la forme d'un module spécifique. En d'autres termes, c'est un genre de "constructeur de modules". Un module qui permet d'en créer un depuis l'administration de Drupal, sans avoir besoin de le coder. Un peu comme Panels permet de personnaliser l'affichage sans avoir besoin de coder son thème. "

J'ai du mal à saisir l'analogie avec panels puisque le point clef de feature c'est l'exportation de paramètres de configuration dans un fichier; c'est à dire sortir les paramètres de la base de données pour les mettre dans un fichier php; ce qui permet des mises à jour de configuration sans devoir mettre à la jour la base de données lors d'une mise à jour de sa feature. Feature se content de créer une "définition". Development seed a fait le choix de mettre cette définition dans un module ce qui offre pas mal d'avantages.
Rules de rapproche beaucoup plus d'un "module permettant de créer des modules sans coder".

citation : "Je conçois que ce soit très pratique (gain de temps, facilité) mais je me pose des questions. Un bon module est celui qui dépend du moins de modules possible ; on ne peut pas toujours éviter certaines dépendances, mais pourquoi en ajouter une dont on pourrait se passer en codant le module (ou en codant un pattern, voir plus bas) ?"

Si tu codes un pattern, tu es dépendante du module de pattern donc je ne suis pas sur de comprendre l'argument ?

"Un bon module est celui qui dépend du moins de modules possible ;"

Oui ça rend les choses plus simples. En revanche le fait qu'une feature soit un ensemble de modules existants veut dire que tu es libre de reconfigurer comme bon te semble chaque partie de la feature en changeant simplement la configuration d'un des modules. Donc on perd en simplicité / stabilité ce qu'on gagne en souplesse. A chacun sa préférence, je n'ai pas encore fait de choix, j'attends d'avoir plus d'expérience avec features ou autres modules d'exportation de configuration.

citation : "Features est pris en charge par une société (development seed) mais cela fait tout de même une dépendance de plus. Mais, encore une fois, je raisonne par rapport à des exigences techniques qui ne sont pas celles d'un développeur ; j'ai l'impératif absolu de rendre un site, tel que nous les projetons, le moins dépendant possible aux modules additionnels. De m'écarter le moins possible du core."

Je n'ai qu'un objectif : que ça marche et que ça soit facile à maintenir :-) features ou patterns ne peuvent pas être classés comme n'importe quel module additionnel, feature c'est plutôt un chef d'orchestre des modules. Il me semble donc qu'on peut faire une exception pour lui (ou pour patterns ou autre qui aide à développer efficacement un site)

maintenant j'attends avec impatience de pouvoir tester plus à fond patterns, deployment ou distro pour trouver la solution la plus adaptée à mes besoins.

J'ai dix minutes le temps que

J'ai dix minutes le temps que le dîner cuise pour m'occuper de toi :-) Merci de ta réaction !

J'ai du mal à saisir l'analogie avec panels

Sans doute n'est-elle pas très pertinente ; je raisonne en "end-user", je n'ai pas décortiqué Features du point de vue développeur. En fait, il m'a fait penser à Panels au sens où c'est un module qui permet à des gens qui ne savent pas coder (comme moi!) de réaliser (et de réutiliser) facilement des fonctionnalités complexes, de la même manière que Panels permet aux mêmes de réaliser "facilement" des structures de pages complexes. Mais l'analogie s'arrête là - bien sûr, Panels n'agit pas sur les mêmes points ni de la même manière, ne permet pas d'exporter quoi que ce soit (euh, sauf erreur, il y a longtemps que je ne l'ai pas utilisé)....

Si tu codes un pattern, tu es dépendante du module de pattern donc je ne suis pas sur de comprendre l'argument ?

Aaah ! rien à voir !! Le module Pattens ne sert qu'à injecter la configuration/fonctionnalité, pas à la faire fonctionner ! Oui je suis dépendante de Patterns pour interpréter mon pattern, mais une fois qu'il a tourné je n'en ai plus besoin pour que son produit (ce qui en résulte) fonctionne ! C'est là-dessus que je vois une grosse limite de Features. See ? merci de m'avoir fait préciser ...

En revanche le fait qu'une feature soit un ensemble de modules existants veut dire que tu es libre de reconfigurer comme bon te semble chaque partie de la feature en changeant simplement la configuration d'un des modules.

Donc une feature utilisée sur 4 sites différents pourrait devenir 4 features... Merci la maintenance, non ?!

Mais ce n'est pas seulement une question de "préférence" : tu vas voir quand tu maîtriseras mieux Patterns que, clairement, Patterns a été conçu pour faire gagner du temps à l'administrateur du site, en automatisant certaines choses. Il bascule x paramètres du coeur (et de certains modules additionnels) d'un seul coup. Une fois ce basculement fait, tu n'as en principe plus à revenir dessus (mais tu peux "run update" comme tu l'as vu). Features fait ce que son nom indique (il pilote une fonctionnalité avancée) ; la fonctionnalité reste "attachée" à Features - ce qui peut être plus pratique aussi, si tu souhaites la désactiver facilement par exemple. L'usage auquel je pense se rapproche plus de ce que permet Patterns donc je m'investirais plus dedans ; mais je conçois que Features soit très pratique...

Débat intéressant ! Juste

Débat intéressant !
Juste pour la parenthèse on peut exporter / importer les panels.

J'ai commencé un peu pattern

J'ai commencé un peu pattern et ils n'ont pas l'air d'avoir la même approche en effet. Je pense qu'il pourrait être complémentaires car je ne crois pas que features gère la taxonomie pour l'instant. De même patterns peut, contrairement à features, créer des nodes ou des users etc... Alors que features lui se veut uniquement une définition d'une macro-fonctionnalité.
En revanche pour exporter une vue features est bien plus facile à utiliser. (en un clic c'est fait)

@Artusamak : merci pour la

@Artusamak : merci pour la précision ; je n'ai pas ouvert Panels depuis au moins huit mois, il n'était pas en version stable et complète à l'époque.

@nyl auster : c'est clair que patterns pèche côté views, et le plus problématique est sans doute que les développeurs ne sont pas très présents dans le feedback... mais l'approche de patterns est clairement "construisez votre site rapidement" (et depuis le bloc-notes !) tandis que features est plus "réutilisez des morceaux de votre site facilement". La finalité est similaire (gagner du temps dans la mise en place d'un site) mais l'approche est différente. En ce sens ils sont probablement assez complémentaires.

Excellent votre article,

Excellent votre article, Merci beaucoup pour toutes ces renseignements, je vous souhaite une bonne continuation.

betclic

Merci!

Merci!

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.