Partager cet article :

Blog
Aug 08, 20238 min read

Tutoriel sur le module Config split pour Drupal

Ivaylo Tsandev

Développeur

Tutoriel sur le module Config split pour Drupal

En tant que développeurs, nous sommes souvent amenés à travailler dans des environnements différents. Cela peut parfois conduire à des problèmes (inattendus). Dans Drupal 8, nous utilisons le système de configuration qui fonctionne plutôt bien, mais il y a des cas où les paramètres pour l'environnement local et tout autre environnement devraient être différents.

Disons que nous ne voulons pas permettre aux administrateurs du site d'utiliser les modules Views UI et DB log, mais que nous en avons besoin pour le développement. Cependant, lorsque nous activons ces modules et exportons les configurations, ils apparaîtront dans le fichier core.extensions.yml, et lors de l'exécution d'une importation de configurations dans n'importe quel autre environnement, ils seront activés. Ce n'est pas ce que nous voulons.

Alors, quelle est la décision ?

Nous pouvons toujours les activer pour le développement et les désactiver avant l'exportation de la configuration. Nous pourrions également exporter avec les modules activés et supprimer leurs entrées du fichier core.extensions.yml avant de livrer. Mais ... soyons honnêtes. Sommes-nous sûrs de pouvoir faire cela à CHAQUE fois ? Je n'en suis pas si sûr. Et qu'en est-il s'il y a plusieurs entrées que nous devons gérer ? Ce n'est pas très pratique, n'est-ce pas ?

C'est ici que le module Configuration Split prend place. Je vais maintenant vous montrer une utilisation basique de ce module.

Commençons par le commencement. Intégrons-le dans notre projet :

composer require drupal/config_split

Ensuite, nous l'activons via l'interface utilisateur ou en l'exécutant :

drush fr config_split

Notez qu'il dépend d'un autre module - Config Filter, mais cette dépendance est gérée automatiquement, alors assurez-vous simplement de confirmer l'activation des deux modules. C'est bien. Nous avons maintenant une nouvelle section dans l'onglet 'Configuration' sous la section 'Développement' et elle s'appelle 'Configuration split settings'

Configuration split settings

Cliquez dessus ou visitez directement l'url '/admin/config/development/configuration/config-split'. La première chose que vous verrez est que nous n'avons pas encore de paramètres de division de la configuration.

Configuration split settings page

OK - créons-en deux - dev et prod. Mais d'abord, plaçons ceci dans le fichier 'settings.php' :

$settings['config_sync_directory'] = '../config/sync' ;

Cela signifie que les configurations se trouvent dans le répertoire racine, dans un dossier appelé "config". Ce dossier aura un sous-dossier "sync", qui contiendra toutes les configurations principales. Maintenant, lorsque nous exécutons :

drush cex

Nous avons déjà un répertoire config/sync, qui contient toutes les configurations.

Avant d'aller plus loin, créons nos sous-dossiers spéciaux dans le dossier "config". Nommons-les "dev" et "prod". Le résultat devrait être le suivant :

config sync directory

Nous sommes maintenant prêts à créer nos configurations.

Revenons sur le site, appuyons sur le gros bouton et créons le premier. Remplissez 'Dev' dans le champ Label et '../config/dev' (pas besoin de guillemets) dans le champ Dossier. Vous vous souvenez des dossiers que nous avons créés ? C'est ici que nous les utiliserons. Appuyez sur Enregistrer. Nous avons maintenant la première configuration.

Créons le second. Répétez l'étape précédente en remplissant 'Prod' et '../config/prod' dans les champs correspondants. C'est parfait. Nous avons presque terminé.

Create prod configuration split settings

Maintenant, activons les modules que nous voulons uniquement pour l'environnement de développement. Commençons par Views UI et DB log s'ils ne sont pas déjà activés. Si c'est le cas, passons à l'étape suivante. Visitez le site '/admin/config/development/configuration/config-split/dev/edit'. Naviguez jusqu'à la section 'Complete split', descendez jusqu'à 'Database Logging' et cochez-la. Ensuite, faisons défiler vers le bas jusqu'à 'Views UI' et vérifions-le.

split modules

En général, nous ne travaillons qu'avec cette section "Complete split" pour les modules et les éléments de configuration. Nous parlerons des autres sections plus tard. Maintenant, sauvegardons. C'est très bien. Nous devons exporter nos configurations.

drush cex

Si nous vérifions maintenant le répertoire 'sync', nous verrons quelque chose comme ceci:
  ;

Config sync directory changes

Notre dossier d'environnement de développement contient les informations relatives à nos modifications.

C'est ici qu'intervient la partie la plus déroutante du travail avec ce module. Si nous consultons à nouveau la page d'aperçu de la division de la configuration, nous verrons deux configurations actives.

Configuration split settings page

Comment les distinguer ? Hmm. Prenons un peu de recul - en quoi cela est-il blessant ? Nous les avons créés, n'est-ce pas ? Oui, mais nous n'avons besoin que d'un seul d'entre eux dans chaque environnement. Sur la machine locale, nous avons besoin de celui de dev et n'importe quel test/stage/prod aurait besoin de sa propre configuration. Cependant, lorsqu'ils sont tous actifs, il n'y a pas de réelle séparation. Alors, que pouvons-nous faire ? La réponse est que nous devons les écraser de manière programmatique avec le fichier settings.php. Commençons par créer une variable appelée "$env" et fixons sa valeur à "dev". Cette valeur peut provenir d'une variable d'environnement. Elle peut être placée dans un fichier settings.local.php ignoré ou toute autre méthode correspondant à notre cas d'utilisation. Pour l'instant, nous allons la changer manuellement. Ajoutons donc les lignes suivantes dans notre fichier settings.(local.)php :

$env = 'dev' ; 
switch ($env) { 
 case 'prod' : 
 $config['config_split.config_split.dev']['status'] = FALSE ; 
 $config['config_split.config_split.prod']['status'] = TRUE ; 
 break ; 
 case 'dev' : 
 default : 
 $config['config_split.config_split.dev']['status'] = TRUE ; 
 $config['config_split.config_split.prod']['status'] = FALSE ; 
 break ; 
}

Actualisons maintenant la page de présentation.

Configuration split settings page

C'est mieux. Nous n'avons plus qu'une seule configuration active. S'il y en a plusieurs, elles doivent être écrasées de la même manière. Nous voulons toujours avoir une seule configuration active.

Changeons maintenant la valeur de la variable '$env' en 'prod' et faisons comme si nous étions sur le serveur. Les paramètres ci-dessus seront inversés.

Configuration split settings page
Nous allons maintenant désactiver les modules, exporter les configurations et vider le cache :

drush pmu views_ui dblog 
drush cex 
drush cr

OK, essayons de voir si cela fonctionne. Maintenant, dans l'environnement prod, nous ne les avons pas. Mais apparaîtront-ils lorsque nous reviendrons à l'environnement de développement ? Remettons le '$env' à 'dev'. N'oubliez pas de vider le cache. Importons les configurations.

drush cr 
drush cim

Ils sont de retour ! Les modules Views UI et DB log sont déjà désactivés par défaut dans tous les autres environnements, à l'exception de l'environnement 'dev'. Nous pouvons maintenant oublier de gérer ces modules séparément. N'est-ce pas génial ?

Une fois cette configuration mise en place, il est très facile de l'utiliser. C'est ainsi qu'un module entier est configuré. De la même manière, nous pouvons utiliser n'importe quelle configuration. Comme 'system.mail' ou n'importe quel bloc. Ou comme 'comment.settings'. Supprimons également l'agrégation CSS et JS. Ils se trouvent sous Configuration -> ; Développement sous Optimisation de la bande passante. Décochons les deux.

Bandwidth optimization settings

Revenons à la partie Dev de notre configuration fractionnée et trouvons l'entrée 'system.performance' sous les éléments Complete Split -> ; Configuration, cochons-la et sauvegardons. Cela garantira que l'environnement de développement n'aura pas d'agrégation. Nous pourrions également placer des enregistrements manuellement ici. N'oubliez pas d'exporter vos configurations une fois qu'elles sont prêtes. Voilà, c'est fait. Facile, n'est-ce pas ?

La dernière partie restante est la section de fractionnement conditionnel de notre configuration. Avant d'y apporter des modifications, voyons quelle est la différence entre "Fractionnement complet" et "Fractionnement conditionnel". Si vous jetez un coup d'œil à la description de chacune de ces sections, vous remarquerez que la première dit :

"Split complet : Les configurations listées ici seront supprimées du répertoire de synchronisation et sauvegardées dans le répertoire de scission à la place. Les modules seront supprimés de core.extension lors de l'exportation (et ajoutés lors de l'importation avec la séparation activée)"   ;

Et l'autre est :

"Séparation conditionnelle : La configuration listée ici sera laissée intacte dans le répertoire de synchronisation principal. La version actuellement active sera exportée vers le répertoire fractionné."

Cela signifie donc qu'en mettant quoi que ce soit dans la section Complete split, cette configuration disparaît du répertoire principal (c'est-à-dire /config/sync), alors que la section conditionnelle ne la supprime pas. Elle conserve les deux valeurs et n'applique les différentes valeurs que lorsque c'est nécessaire. Il y a même une option pour séparer conditionnellement seulement si le paramètre est en fait différent de celui du répertoire principal. Cela peut également s'avérer très pratique. Un autre avantage est que nous pouvons exporter des configurations dépendantes avec la séparation conditionnelle :

Conditional split settings

Voilà, c'est tout ! J'espère que ce tutoriel vous sera utile !

S'ABONNER À NOTRE NEWSLETTER

Partager cet article :

S'ABONNER À NOTRE NEWSLETTER

Articles de blog connexes

    Construire une équipe Agile performante : Notre approche éprouvée

    Blog

    Construire une équipe Agile performante : Notre approche éprouvée

    Découvrez comment nous construisons des équipes Agile performantes en définissant des rôles clairs, en favorisant la collaboration et en utilisant des outils flexibles.

    Écrit par Svetoslava Angelova
    Aug 27, 202411 min read
    Drupal 11 : à quoi s'attendre ? Guide complet des nouvelles fonctionnalités et des améliorations

    Blog

    Drupal 11 : à quoi s'attendre ? Guide complet des nouvelles fonctionnalités et des améliorations

    Drupal 11 est sorti ! Dans cet article, découvrez ses fonctionnalités et améliorations passionnantes. Mettez-le à jour dès maintenant pour redéfinir votre stratégie numérique avec l'aide des experts de Bulcode.

    Écrit par Svetoslava Angelova
    Aug 05, 20249 min read
    Composants d'annuaire unique dans Drupal core : Une vue d'ensemble

    Blog

    Composants d'annuaire unique dans Drupal core : Une vue d'ensemble

    Découvrez comment les composants à répertoire unique (SDC) de Drupal Core rationalisent le processus de développement en encapsulant les fichiers liés aux composants dans un répertoire unique. Découvrez les avantages des SDC et suivez un guide étape par étape pour les mettre en œuvre dans vos projets Drupal.

    Écrit par Nikolay Tsekov
    Aug 07, 20244 min read
    NVM vs NPM vs Yarn

    Blog

    NVM vs NPM vs Yarn

    Par rapport à ces trois technologies, le NVM diffère des deux autres. Node Version Manager (NVM) est utilisé pour gérer les versions de Node.js. NPM et Yarn sont des gestionnaires de paquets Node.js. Ils permettent de télécharger, d'installer et de gérer des paquets lors du développement en JavaScript.

    Écrit par Ventsislav Venkov
    Aug 07, 20235 min read
    Quel modèle d'engagement informatique vous convient le mieux ?

    Blog

    Quel modèle d'engagement informatique vous convient le mieux ?

    Prix fixe, temps et matériel, ou équipes dédiées ? Examinez attentivement les avantages et les inconvénients du modèle d'engagement pour votre projet.

    Écrit par Svetoslava Angelova
    Aug 07, 202311 min read
    Les sites web des aéroports de Varna et Burgas utilisent des composants React dans Drupal

    Blog

    Les sites web des aéroports de Varna et Burgas utilisent des composants React dans Drupal

    Drupal est un système modulaire dont les fonctions peuvent être adaptées à de nombreux besoins différents, ce qui est particulièrement important pour les projets d'administration publique.

    Écrit par Mihail Shahov
    Aug 08, 20234 min read
    Laravel Mix - un wrapper simple et puissant autour de Webpack

    Blog

    Laravel Mix - un wrapper simple et puissant autour de Webpack

    Laravel Mix fournit une API fluide pour définir les étapes de construction de webpack pour votre application Laravel en utilisant plusieurs pré-processeurs CSS et JavaScript communs.

    Écrit par Stefani Tashkova
    Aug 07, 20234 min read
    Qu'est-ce que Scrum ?

    Blog

    Qu'est-ce que Scrum ?

    Scrum fait partie de la méthodologie Agile. C'est le cadre le plus populaire pour le développement agile, et c'est un cadre de processus simple.

    Écrit par Svetoslava Angelova
    Aug 08, 20235 min read
    Rôles dans Scrum

    Blog

    Rôles dans Scrum

    Les rôles Scrum et la manière dont vous pouvez les intégrer dans votre organisation.

    Écrit par Svetoslava Angelova
    Aug 07, 20234 min read
    Événements SCRUM

    Blog

    Événements SCRUM

    Scrum définit plusieurs événements (parfois appelés cérémonies) qui se déroulent au cours de chaque sprint : la planification du sprint, la mêlée quotidienne, la revue du sprint et la rétrospective du sprint.

    Écrit par Svetoslava Angelova
    Aug 07, 20233 min read
    Artéfacts Scrum

    Blog

    Artéfacts Scrum

    Dans le domaine du développement logiciel, le terme "artefact" fait référence aux informations que les parties prenantes et l'équipe scrum utilisent pour décrire un produit en cours de développement.

    Écrit par Svetoslava Angelova
    Aug 07, 20232 min read
    Drupal sans tête avec Next.js - un exemple simple à suivre

    Blog

    Drupal sans tête avec Next.js - un exemple simple à suivre

    La tendance récente, dans le développement web en général, et par conséquent dans le développement Drupal, est d'utiliser la technologie headless. La tendance récente, dans le développement web en général, et par conséquent dans le développement Drupal, est d'utiliser la technologie headless.

    Écrit par Mihail Shahov
    Aug 07, 20238 min read

    PRENDRE CONTACT

    Vous avez un projet à lancer ?