{"id":3699,"date":"2019-08-06T20:00:36","date_gmt":"2019-08-06T20:00:36","guid":{"rendered":"https:\/\/understanddrupal.com\/?p=3699"},"modified":"2022-04-24T05:55:41","modified_gmt":"2022-04-24T05:55:41","slug":"conseils-pour-ecrire-des-migrations-drupal","status":"publish","type":"post","link":"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/","title":{"rendered":"Conseils pour \u00e9crire des migrations Drupal"},"content":{"rendered":"\n<p>Nous avons pr\u00e9sent\u00e9 plusieurs exemples dans le cadre de&nbsp;<a href=\"https:\/\/understanddrupal.com\/fr\/migrations\">cette s\u00e9rie de blogues sur la migration<\/a>. Elles ont commenc\u00e9 de fa\u00e7on tr\u00e8s simple et sont devenues de plus en plus complexes. Jusqu&#8217;\u00e0 pr\u00e9sent, nous avons \u00e9t\u00e9 plut\u00f4t optimistes. Obtenez le code exemple, installez n&#8217;importe quelle d\u00e9pendance de module, activez le module qui d\u00e9finit la migration, et ex\u00e9cutez-le en supposant que tout fonctionne du premier coup. Mais les migrations Drupal impliquent souvent un peu d&#8217;essais et d&#8217;erreurs. Il s&#8217;agit \u00e0 tout le moins d&#8217;un processus it\u00e9ratif. Aujourd&#8217;hui, nous allons parler de ce qui se passe apr\u00e8s les op\u00e9rations d&#8217;<strong>importation<\/strong>&nbsp;et de&nbsp;<strong>rollback<\/strong>, comment&nbsp;<strong>r\u00e9cup\u00e9rer apr\u00e8s une migration rat\u00e9e<\/strong>, et quelques conseils pour&nbsp;<strong>\u00e9crire des fichiers de d\u00e9finition<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"540\" data-src=\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0.jpeg\" alt=\"\" class=\"wp-image-3700 lazyload\" data-srcset=\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0.jpeg 960w, https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0-300x169.jpeg 300w, https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0-768x432.jpeg 768w\" data-sizes=\"(max-width: 960px) 100vw, 960px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 960px; --smush-placeholder-aspect-ratio: 960\/540;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"540\" src=\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0.jpeg\" alt=\"\" class=\"wp-image-3700\" srcset=\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0.jpeg 960w, https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0-300x169.jpeg 300w, https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0-768x432.jpeg 768w\" sizes=\"(max-width: 960px) 100vw, 960px\" \/><\/noscript><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-importation-et-rollback-des-migrations\">Importation et rollback des migrations<\/h2>\n\n\n\n<p>Lorsque vous travaillez sur un projet de migration, il est courant d&#8217;\u00e9crire de nombreux fichiers de d\u00e9finition de migration. M\u00eame si vous n&#8217;en aviez qu&#8217;un seul, il est tr\u00e8s probable que votre destination n\u00e9cessitera de nombreuses cartographies de champs. Ex\u00e9cuter une op\u00e9ration d&#8217;importation pour obtenir les donn\u00e9es dans Drupal est la premi\u00e8re \u00e9tape. Avec autant de pi\u00e8ces mobiles, il est facile de ne pas obtenir les r\u00e9sultats escompt\u00e9s d\u00e8s le premier essai. Lorsque cela se produit, vous pouvez lancer une op\u00e9ration de rollback. Ceci demande au syst\u00e8me d&#8217;annuler tout ce qui a \u00e9t\u00e9 introduit lors de l&#8217;importation initiale de la migration. Apr\u00e8s le rollback, vous pouvez apporter des modifications au fichier de d\u00e9finition de migration et reconstruire le cache de Drupal pour que le syst\u00e8me puisse r\u00e9cup\u00e9rer vos modifications. Enfin, vous pouvez effectuer une autre op\u00e9ration d&#8217;importation. R\u00e9p\u00e9tez ce processus jusqu&#8217;\u00e0 ce que vous obteniez les r\u00e9sultats escompt\u00e9s. L&#8217;extrait de code suivant montre un flux de travail de base de la migration Drupal :<\/p>\n\n\n\n<p><code>Loading gist https:\/\/gist.github.com\/dinarcon\/73cf3dc1af44ba59ae3daae1051aeaf4<\/code><\/p>\n\n\n\n<p>L&#8217;exemple ci-dessus suppose que vous utilisez&nbsp;<a href=\"https:\/\/www.drush.org\/\">Drush<\/a>&nbsp;pour ex\u00e9cuter les commandes de migration. Plus pr\u00e9cis\u00e9ment, les commandes fournies par&nbsp;<a href=\"https:\/\/www.drupal.org\/project\/migrate_run\">Migrate Run<\/a>&nbsp;ou&nbsp;<a href=\"https:\/\/www.drupal.org\/project\/migrate_tools\">Migrate Tools<\/a>. Vous choisissez l&#8217;un ou l&#8217;autre, mais pas les deux car les commandes fournies pour deux modules sont les m\u00eames. Si vous aviez activ\u00e9 les deux, ils entreraient en conflit l&#8217;un avec l&#8217;autre et \u00e9choueraient. Une autre chose \u00e0 noter est que l&#8217;exemple utilise Drush 9. Il y a eu des remaniements majeurs entre les versions 8 et 9 qui incluent des changements au nom des commandes. Finalement, `udm_subfields` est le `id` de la migration \u00e0 ex\u00e9cuter. Vous trouverez le code complet dans cet&nbsp;<a href=\"https:\/\/understanddrupal.com\/fr\/articles\/migrer-les-donnees-dans-les-sous-champs-drupal\">article<\/a>.<\/p>\n\n\n\n<p><em>Conseil<\/em>: Vous pouvez utiliser les alias de commande Drush pour \u00e9crire des commandes plus courtes. Tapez `drush [nom-commande] &#8211;help` pour une liste des alias disponibles.<\/p>\n\n\n\n<p><em>Note technique<\/em>: Pour rendre les modifications apport\u00e9es au fichier de d\u00e9finition fonctionnelles, vous devez reconstruire les caches de Drupal. C&#8217;est la proc\u00e9dure \u00e0 suivre lors de la cr\u00e9ation des fichiers YAML en utilisant les fonctionnalit\u00e9s de base de Migrate API et en les pla\u00e7ant dans le r\u00e9pertoire `migrations`. Il est \u00e9galement possible de d\u00e9finir des migrations en tant qu&#8217;entit\u00e9s de configuration \u00e0 l&#8217;aide du module&nbsp;<a href=\"https:\/\/www.drupal.org\/project\/migrate_plus\">Migrate Plus<\/a>. Dans ces cas, les fichiers YAML suivent une convention d&#8217;appellation diff\u00e9rente et sont plac\u00e9s dans le r\u00e9pertoire `config\/install`. Pour reprendre les modifications dans ce cas, vous devez synchroniser la d\u00e9finition YAML \u00e0 l&#8217;aide des workflows de&nbsp;<a href=\"https:\/\/www.drupal.org\/docs\/8\/configuration-management\/managing-your-sites-configuration\">gestion de configuration<\/a>. Cette question sera abord\u00e9e dans un prochain article.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-arret-et-reinitialisation-des-migrations\">Arr\u00eat et r\u00e9initialisation des migrations<\/h2>\n\n\n\n<p>Parfois, vous n&#8217;obtenez pas les r\u00e9sultats escompt\u00e9s en raison d&#8217;un oubli dans l&#8217;\u00e9tablissement d&#8217;une valeur. Dans d&#8217;autres cas, des erreurs PHP fatales peuvent survenir lors de l&#8217;ex\u00e9cution de la migration. Il se peut que l&#8217;API de migration ne soit pas en mesure de r\u00e9cup\u00e9rer de telles erreurs. Par exemple, utiliser une fonction PHP inexistante avec le plugin `callback`. Essayez-le en modifiant l&#8217;exemple de cet&nbsp;<a href=\"https:\/\/understanddrupal.com\/fr\/articles\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\">article<\/a>. Lorsque ces erreurs se produisent, la migration est laiss\u00e9e dans un \u00e9tat o\u00f9 aucune op\u00e9ration d&#8217;importation ou de rollback ne peut \u00eatre effectu\u00e9e.<\/p>\n\n\n\n<p>Vous pouvez v\u00e9rifier l&#8217;\u00e9tat de toute migration en ex\u00e9cutant la commande `drush migrate:status`. Id\u00e9alement, vous les voulez dans l&#8217;\u00e9tat `Idle`. Quand quelque chose \u00e9choue pendant l&#8217;importation ou le rollback, vous obtiendrez les \u00e9tats `Importing` ou `Rolling back`. Pour r\u00e9cup\u00e9rer la migration vers `Idle` vous arr\u00eatez la migration et r\u00e9initialisez son statut. L&#8217;extrait suivant montre comment le faire:<\/p>\n\n\n\n<p><code>Loading gist https:\/\/gist.github.com\/dinarcon\/73cf3dc1af44ba59ae3daae1051aeaf4<\/code><\/p>\n\n\n\n<p><em>Conseil<\/em>: Les erreurs g\u00e9n\u00e9r\u00e9es par l&#8217;API Migrate peuvent ne pas fournir suffisamment d&#8217;informations pour d\u00e9terminer ce qui s&#8217;est mal pass\u00e9. Une excellente fa\u00e7on de vous familiariser avec les erreurs possibles est de g\u00e2cher intentionnellement les migrations de travail. Dans le&nbsp;<a href=\"https:\/\/github.com\/dinarcon\/ud_migrations\">r\u00e9f\u00e9rentiel d&#8217;exemple<\/a>&nbsp;de cette s\u00e9rie, il existe de nombreuses migrations que vous pouvez modifier. Essayez tout ce qui vous vient \u00e0 l&#8217;esprit: ne pas laisser d&#8217;espace apr\u00e8s les&nbsp;<em>deux points<\/em>&nbsp;(<strong>:<\/strong>) dans une attribution de valeur-cl\u00e9; ne pas utiliser d&#8217;indentation correcte ; utiliser des noms de&nbsp;<a href=\"https:\/\/understanddrupal.com\/fr\/articles\/migrer-les-donnees-dans-les-sous-champs-drupal\">sous-champs<\/a>&nbsp;erron\u00e9s; utiliser des valeurs invalides dans l&#8217;attribution de propri\u00e9t\u00e9s; etc. Vous pourriez \u00eatre surpris de la fa\u00e7on dont l\u2019API Migrate traite ces erreurs. Notez \u00e9galement que de nombreuses autres&nbsp;<a href=\"https:\/\/www.drupal.org\/docs\/8\/api\">APIs Drupal<\/a>&nbsp;sont impliqu\u00e9es. Par exemple, vous pouvez obtenir une erreur d&#8217;analyse de fichier YAML ou une erreur de sauvegarde de l&#8217;API Entity. Lorsque vous avez d\u00e9j\u00e0 vu une erreur, il est g\u00e9n\u00e9ralement plus rapide d&#8217;en identifier la cause et d&#8217;y rem\u00e9dier dans le futur.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-que-se-passe-t-il-lorsque-vous-annulez-une-migration-drupal\">Que se passe-t-il lorsque vous annulez une migration Drupal?<\/h2>\n\n\n\n<p>Dans un sc\u00e9nario id\u00e9al, lorsqu&#8217;une migration est annul\u00e9e, elle se nettoie apr\u00e8s elle-m\u00eame. Cela signifie qu&#8217;il supprime toute entit\u00e9 cr\u00e9\u00e9e lors de l&#8217;op\u00e9ration d&#8217;importation : n\u0153uds, termes de taxonomie, fichiers, etc. Malheureusement, ce n&#8217;est pas toujours le cas. Il est tr\u00e8s important de le comprendre lors de la planification et de l&#8217;ex\u00e9cution des migrations. Par exemple, il se peut que vous ne souhaitiez pas laisser des termes de taxonomie ou des fichiers qui ne sont plus en usage. La question de savoir si une entit\u00e9 d\u00e9pendante est supprim\u00e9e ou non est li\u00e9e au fonctionnement des plugins ou des entit\u00e9s.<\/p>\n\n\n\n<p>Par exemple, lorsque vous utilisez les plugins `file_import` ou `image_import` fournis par&nbsp;<a href=\"https:\/\/www.drupal.org\/project\/migrate_file\">Migrate File<\/a>, les fichiers et images cr\u00e9\u00e9s ne sont pas supprim\u00e9s du syst\u00e8me lors du rollback. Lors de l&#8217;utilisation du plugin `entity_generate` de Migrate Plus, l&#8217;entit\u00e9 cr\u00e9\u00e9e reste \u00e9galement dans le syst\u00e8me apr\u00e8s une op\u00e9ration de rollback.<\/p>\n\n\n\n<p>Dans le prochain billet du blog, nous allons commencer \u00e0 parler des d\u00e9pendances migratoires. Que se passe-t-il avec les migrations d\u00e9pendantes (e.g., fichiers et paragraphes) lorsque la migration pour l&#8217;entit\u00e9 h\u00f4te (e.g., noeud) est annul\u00e9e? Dans ce cas, l&#8217;API de migration effectuera une op\u00e9ration de suppression d&#8217;entit\u00e9 sur le n\u0153ud. Dans ce cas, les fichiers r\u00e9f\u00e9renc\u00e9s sont conserv\u00e9s dans le syst\u00e8me, mais les paragraphes sont automatiquement supprim\u00e9s. Pour les curieux, ce comportement pour les paragraphes est en fait d\u00e9termin\u00e9 par la d\u00e9pendance de son module:&nbsp;<a href=\"https:\/\/www.drupal.org\/project\/entity_reference_revisions\">Entity Reference Revisions<\/a>. Nous parlerons plus en d\u00e9tail des migrations de paragraphes dans les prochains billets de blog.<\/p>\n\n\n\n<p>La morale de l&#8217;histoire est que le syst\u00e8me de migration du comportement pourrait \u00eatre affect\u00e9 par d&#8217;autres API Drupal. Et dans le cas d&#8217;op\u00e9rations de rollback, assurez-vous de lire la documentation ou de tester manuellement pour savoir quand les migrations sont suppriment tout le n\u00e9cessaire et quand elles ne le font pas.<\/p>\n\n\n\n<p><em>Remarque<\/em>: Cette section portait sur les migrations d&#8217;entit\u00e9s de contenu. L&#8217;id\u00e9e g\u00e9n\u00e9rale peut \u00eatre appliqu\u00e9e aux&nbsp;<a href=\"https:\/\/www.drupal.org\/docs\/8\/api\/migrate-api\/migrate-destination-plugins-examples\/migrating-configuration\">entit\u00e9s de configuration<\/a>&nbsp;ou \u00e0 toute cible personnalis\u00e9e du&nbsp;<a href=\"https:\/\/understanddrupal.com\/fr\/articles\/les-migrations-drupal-comprendre-le-processus-etl\">processus ETL<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-reimporter-ou-mettre-a-jour-les-migrations\">R\u00e9importer ou mettre \u00e0 jour les migrations<\/h2>\n\n\n\n<p>Nous venons de mentionner que l\u2019API Migrate \u00e9met une action de suppression d&#8217;entit\u00e9 lors qu\u2019un rollback d&#8217;une migration est effectu\u00e9. Ceci a un autre effet secondaire important. Les ID d&#8217;entit\u00e9 (nid, uid, tid, fid, etc. ) vont changer \u00e0 chaque fois que vous annulez \u00e0 nouveau une importation. D\u00e9pendre des identifiants g\u00e9n\u00e9r\u00e9s automatiquement n&#8217;est g\u00e9n\u00e9ralement pas une bonne id\u00e9e. Mais gardez-le \u00e0 l&#8217;esprit au cas o\u00f9 votre flux de travail pourrait \u00eatre affect\u00e9. Par exemple, si vous ex\u00e9cutez des migrations dans un environnement de mise \u00e0 disposition de contenu, les r\u00e9f\u00e9rences aux entit\u00e9s migr\u00e9es peuvent se casser si leurs ID changent. De plus, si vous deviez mettre \u00e0 jour manuellement les entit\u00e9s migr\u00e9es pour nettoyer les cas des bords (edge cases), ces changements seraient perdus si vous effectuez un rollback et importez \u00e0 nouveau. Enfin, gardez \u00e0 l&#8217;esprit que les donn\u00e9es d&#8217;essai peuvent rester dans le syst\u00e8me, comme d\u00e9crit dans la section pr\u00e9c\u00e9dente, qui pourrait se retrouver dans les environnements de production.<\/p>\n\n\n\n<p>Une alternative aux rollbacks d&#8217;une migration est de ne pas ex\u00e9cuter cette op\u00e9ration du tout. Au lieu de cela, vous ex\u00e9cutez \u00e0 nouveau une op\u00e9ration d&#8217;importation \u00e0 l&#8217;aide du marqueur `update`. Ceci indique au syst\u00e8me qu&#8217;en plus de migrer les postes non trait\u00e9s de la source, vous souhaitez \u00e9galement mettre \u00e0 jour les postes qui ont \u00e9t\u00e9 pr\u00e9c\u00e9demment import\u00e9s en utilisant leurs valeurs actuelles. Pour ce faire, l&#8217;API Migrate s&#8217;appuie sur des identificateurs de source et des&nbsp;<a href=\"https:\/\/www.drupal.org\/docs\/8\/api\/migrate-api\/migrate-api-overview#map-tables\">tables de correspondance<\/a>. Vous pouvez envisager cette option lorsque votre source change fr\u00e9quemment, lorsque vous avez un grand nombre d&#8217;enregistrements \u00e0 importer ou lorsque vous souhaitez ex\u00e9cuter la m\u00eame migration plusieurs fois sur une m\u00eame planification.<\/p>\n\n\n\n<p><em>Remarque<\/em>: Lors des op\u00e9rations d&#8217;importation, l&#8217;API Migrate \u00e9met une action de sauvegarde d&#8217;entit\u00e9.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conseils-pour-ecrire-des-migrations-drupal\">Conseils pour \u00e9crire des migrations Drupal<\/h2>\n\n\n\n<p>Lorsque vous travaillez sur des projets de migration, vous pouvez vous retrouver avec de nombreux fichiers de d\u00e9finition de migration. Ils peuvent d\u00e9finir des d\u00e9pendances l&#8217;un par rapport \u00e0 l&#8217;autre. Chaque fichier peut contenir un nombre significatif de mappages de champs. Il y a beaucoup de choses que vous pouvez faire pour rendre les migrations Drupal plus simples. Par exemple, pratiquer avec diff\u00e9rents sc\u00e9narios de migration et \u00e9tudier des exemples de travail. Comme r\u00e9f\u00e9rence pour vous aider dans le processus de migration vers Drupal, voici quelques conseils :<\/p>\n\n\n\n<ul><li>Partir d&#8217;une migration existante. Recherchez un exemple en ligne qui fait quelque chose de proche de ce dont vous avez besoin et modifiez-le selon vos besoins.<\/li><li>Portez une attention particuli\u00e8re \u00e0 la syntaxe du fichier YAML. Un espace superflu ou un niveau d&#8217;indentation incorrect peut casser toute la migration.<\/li><li>Lisez la&nbsp;<a href=\"https:\/\/www.drupal.org\/docs\/8\/api\/migrate-api\">documentation<\/a>&nbsp;pour savoir quels plugins&nbsp;<a href=\"https:\/\/www.drupal.org\/docs\/8\/api\/migrate-api\/migrate-source-plugins\">source<\/a>,&nbsp;<a href=\"https:\/\/www.drupal.org\/docs\/8\/api\/migrate-api\/migrate-process-plugins\">processus<\/a>&nbsp;et&nbsp;<a href=\"https:\/\/www.drupal.org\/docs\/8\/api\/migrate-api\/migrate-destination-plugins-examples\">destination<\/a>&nbsp;sont disponibles. Il en existe peut-\u00eatre d\u00e9j\u00e0 un qui fait exactement ce dont vous avez besoin.<\/li><li>Assurez-vous de lire la documentation des plugins sp\u00e9cifiques que vous utilisez. Souvent, un plugin offre des configurations optionnelles. Comprendre les outils \u00e0 votre disposition et trouver des fa\u00e7ons cr\u00e9atives de les combiner.<\/li><li>Recherchez les&nbsp;<a href=\"https:\/\/www.drupal.org\/project\/project_module?f%5B0%5D=&amp;f%5B1%5D=&amp;f%5B2%5D=im_vid_3%3A64&amp;f%5B3%5D=drupal_core%3A7234&amp;f%5B4%5D=sm_field_project_type%3Afull&amp;f%5B5%5D=&amp;f%5B6%5D=&amp;text=&amp;solrsort=iss_project_release_usage+desc&amp;op=Search\">modules contribu\u00e9s<\/a>&nbsp;qui pourraient offrir plus de plugins ou de chemins de mise \u00e0 jour \u00e0 partir des versions pr\u00e9c\u00e9dentes de Drupal. L&#8217;\u00e9cosyst\u00e8me migratoire est dynamique et de nombreuses personnes y contribuent.<\/li><li>Lorsque vous \u00e9crivez le&nbsp;<a href=\"https:\/\/understanddrupal.com\/fr\/articles\/utilisation-constantes-et-pseudo-champs-espaces-reserves-de-donnees-migrations-drupal\">pipeline de migration<\/a>, mappez un champ \u00e0 la fois. Les probl\u00e8mes sont plus faciles \u00e0 isoler s&#8217;il n&#8217;y a qu&#8217;une seule chose qui pourrait se briser \u00e0 la fois.<\/li><li>Lorsque vous mappez un champ, travaillez sur une&nbsp;<a href=\"https:\/\/understanddrupal.com\/fr\/articles\/migrer-les-donnees-dans-les-sous-champs-drupal\">sous-champ<\/a>&nbsp;\u00e0 la fois, si possible. Certains types de champs comme les images et les adresses offrent de nombreuses sous-champs. Encore une fois, essayez d&#8217;isoler les erreurs en introduisant des changements individuels \u00e0 chaque fois.<\/li><li>Faites un commit \u00e0 votre r\u00e9f\u00e9rentiel de code tout changement qui produit de bons r\u00e9sultats. De cette fa\u00e7on, vous pouvez remonter dans le temps et r\u00e9cup\u00e9rer une migration partiellement fonctionnelle.<\/li><li>En savoir plus sur les&nbsp;<a href=\"https:\/\/www.drupal.org\/docs\/8\/api\/migrate-api\/debugging-migrations\">migrations de d\u00e9bogage<\/a>. Nous parlerons de ce sujet dans un prochain billet de blog.<\/li><li>Voir l&#8217;aide de la communaut\u00e9. Les d\u00e9veloppeurs et les passionn\u00e9s de Migrate sont tr\u00e8s actifs et r\u00e9actifs dans le canal #migrate de&nbsp;<a href=\"https:\/\/www.drupal.org\/slack\">Drupal slack<\/a>.<\/li><li>Si vous vous sentez coinc\u00e9, faites une pause de l&#8217;ordinateur et revenez-y plus tard. Le repos peut faire des merveilles pour trouver des solutions \u00e0 des probl\u00e8mes difficiles.<\/li><\/ul>\n\n\n\n<p>Qu&#8217;avez-vous appris dans le billet d&#8217;aujourd&#8217;hui? Saviez-vous ce qui se passe lors de l&#8217;importation et de l&#8217;annulation d&#8217;une migration? Saviez-vous que dans certains cas, les donn\u00e9es peuvent rester dans le syst\u00e8me m\u00eame apr\u00e8s les op\u00e9rations de rollback? Avez-vous un cas d&#8217;utilisation pour ex\u00e9cuter des migrations avec le marqueur `update`? Avez-vous d&#8217;autres conseils sur l&#8217;\u00e9criture des migrations? Veuillez partager vos r\u00e9ponses dans les commentaires. Aussi, je vous serais reconnaissant de bien vouloir partager ce billet de blog avec vos coll\u00e8gues.<\/p>\n\n\n\n<p><em>Cette s\u00e9rie de billets est rendue possible gr\u00e2ce \u00e0 ces&nbsp;<a href=\"https:\/\/understanddrupal.com\/migrations\">g\u00e9n\u00e9reux commanditaires<\/a>.&nbsp;<a href=\"https:\/\/understanddrupal.com\/fr\/contact\/feedback\">Contactez-nous<\/a>&nbsp;si votre organisation souhaite soutenir ce projet de documentation, qu&#8217;il s&#8217;agisse de la s\u00e9rie sur la migration ou d&#8217;autres sujets.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>d\u00e9pendance de module, activez le module qui d\u00e9finit la migration, et ex\u00e9cutez-le en supposant que tout fonctionne du premier coup. Mais les migrations Drupal impliquent souvent un peu d&#8217;essais et d&#8217;erreurs. Il s&#8217;agit \u00e0 tout le moins d&#8217;un processus it\u00e9ratif. Aujourd&#8217;hui, nous allons parler de ce qui se passe apr\u00e8s les op\u00e9rations d&#8217;importation\u00a0et de\u00a0rollback, comment\u00a0r\u00e9cup\u00e9rer apr\u00e8s une migration rat\u00e9e, et quelques conseils pour\u00a0\u00e9crire des fichiers de d\u00e9finition.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[23],"tags":[72],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Conseils pour \u00e9crire des migrations Drupal - Understand Drupal<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Conseils pour \u00e9crire des migrations Drupal - Understand Drupal\" \/>\n<meta property=\"og:description\" content=\"d\u00e9pendance de module, activez le module qui d\u00e9finit la migration, et ex\u00e9cutez-le en supposant que tout fonctionne du premier coup. Mais les migrations Drupal impliquent souvent un peu d&#039;essais et d&#039;erreurs. Il s&#039;agit \u00e0 tout le moins d&#039;un processus it\u00e9ratif. Aujourd&#039;hui, nous allons parler de ce qui se passe apr\u00e8s les op\u00e9rations d&#039;importation\u00a0et de\u00a0rollback, comment\u00a0r\u00e9cup\u00e9rer apr\u00e8s une migration rat\u00e9e, et quelques conseils pour\u00a0\u00e9crire des fichiers de d\u00e9finition.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/\" \/>\n<meta property=\"og:site_name\" content=\"Understand Drupal\" \/>\n<meta property=\"article:published_time\" content=\"2019-08-06T20:00:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-04-24T05:55:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0.jpeg\" \/>\n<meta name=\"author\" content=\"Mauricio Dinarte\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mauricio Dinarte\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/\"},\"author\":{\"name\":\"Mauricio Dinarte\",\"@id\":\"https:\/\/understanddrupal.com\/#\/schema\/person\/73fa828d2b498d144def1204a114b7d3\"},\"headline\":\"Conseils pour \u00e9crire des migrations Drupal\",\"datePublished\":\"2019-08-06T20:00:36+00:00\",\"dateModified\":\"2022-04-24T05:55:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/\"},\"wordCount\":2246,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/understanddrupal.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0.jpeg\",\"keywords\":[\"migrations\"],\"articleSection\":[\"Non classifi\u00e9(e)\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/\",\"url\":\"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/\",\"name\":\"Conseils pour \u00e9crire des migrations Drupal - Understand Drupal\",\"isPartOf\":{\"@id\":\"https:\/\/understanddrupal.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0.jpeg\",\"datePublished\":\"2019-08-06T20:00:36+00:00\",\"dateModified\":\"2022-04-24T05:55:41+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/#primaryimage\",\"url\":\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0.jpeg\",\"contentUrl\":\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0.jpeg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/understanddrupal.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Conseils pour \u00e9crire des migrations Drupal\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/understanddrupal.com\/#website\",\"url\":\"https:\/\/understanddrupal.com\/\",\"name\":\"Understand Drupal\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/understanddrupal.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/understanddrupal.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/understanddrupal.com\/#organization\",\"name\":\"Understand Drupal\",\"url\":\"https:\/\/understanddrupal.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/understanddrupal.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2021\/12\/understanddrupal_logo_white.png\",\"contentUrl\":\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2021\/12\/understanddrupal_logo_white.png\",\"width\":100,\"height\":73,\"caption\":\"Understand Drupal\"},\"image\":{\"@id\":\"https:\/\/understanddrupal.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/understanddrupal.com\/#\/schema\/person\/73fa828d2b498d144def1204a114b7d3\",\"name\":\"Mauricio Dinarte\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/understanddrupal.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/20c842c5c006728abe93e6122524f5b7?s=96&d=blank&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/20c842c5c006728abe93e6122524f5b7?s=96&d=blank&r=g\",\"caption\":\"Mauricio Dinarte\"},\"url\":\"https:\/\/understanddrupal.com\/fr\/blog\/author\/dinarcon\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Conseils pour \u00e9crire des migrations Drupal - Understand Drupal","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/","og_locale":"fr_FR","og_type":"article","og_title":"Conseils pour \u00e9crire des migrations Drupal - Understand Drupal","og_description":"d\u00e9pendance de module, activez le module qui d\u00e9finit la migration, et ex\u00e9cutez-le en supposant que tout fonctionne du premier coup. Mais les migrations Drupal impliquent souvent un peu d'essais et d'erreurs. Il s'agit \u00e0 tout le moins d'un processus it\u00e9ratif. Aujourd'hui, nous allons parler de ce qui se passe apr\u00e8s les op\u00e9rations d'importation\u00a0et de\u00a0rollback, comment\u00a0r\u00e9cup\u00e9rer apr\u00e8s une migration rat\u00e9e, et quelques conseils pour\u00a0\u00e9crire des fichiers de d\u00e9finition.","og_url":"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/","og_site_name":"Understand Drupal","article_published_time":"2019-08-06T20:00:36+00:00","article_modified_time":"2022-04-24T05:55:41+00:00","og_image":[{"url":"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0.jpeg"}],"author":"Mauricio Dinarte","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Mauricio Dinarte","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/#article","isPartOf":{"@id":"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/"},"author":{"name":"Mauricio Dinarte","@id":"https:\/\/understanddrupal.com\/#\/schema\/person\/73fa828d2b498d144def1204a114b7d3"},"headline":"Conseils pour \u00e9crire des migrations Drupal","datePublished":"2019-08-06T20:00:36+00:00","dateModified":"2022-04-24T05:55:41+00:00","mainEntityOfPage":{"@id":"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/"},"wordCount":2246,"commentCount":0,"publisher":{"@id":"https:\/\/understanddrupal.com\/#organization"},"image":{"@id":"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/#primaryimage"},"thumbnailUrl":"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0.jpeg","keywords":["migrations"],"articleSection":["Non classifi\u00e9(e)"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/","url":"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/","name":"Conseils pour \u00e9crire des migrations Drupal - Understand Drupal","isPartOf":{"@id":"https:\/\/understanddrupal.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/#primaryimage"},"image":{"@id":"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/#primaryimage"},"thumbnailUrl":"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0.jpeg","datePublished":"2019-08-06T20:00:36+00:00","dateModified":"2022-04-24T05:55:41+00:00","breadcrumb":{"@id":"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/#primaryimage","url":"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0.jpeg","contentUrl":"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/migration_workflows_0.jpeg"},{"@type":"BreadcrumbList","@id":"https:\/\/understanddrupal.com\/fr\/blog\/conseils-pour-ecrire-des-migrations-drupal\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/understanddrupal.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Conseils pour \u00e9crire des migrations Drupal"}]},{"@type":"WebSite","@id":"https:\/\/understanddrupal.com\/#website","url":"https:\/\/understanddrupal.com\/","name":"Understand Drupal","description":"","publisher":{"@id":"https:\/\/understanddrupal.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/understanddrupal.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/understanddrupal.com\/#organization","name":"Understand Drupal","url":"https:\/\/understanddrupal.com\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/understanddrupal.com\/#\/schema\/logo\/image\/","url":"https:\/\/understanddrupal.com\/wp-content\/uploads\/2021\/12\/understanddrupal_logo_white.png","contentUrl":"https:\/\/understanddrupal.com\/wp-content\/uploads\/2021\/12\/understanddrupal_logo_white.png","width":100,"height":73,"caption":"Understand Drupal"},"image":{"@id":"https:\/\/understanddrupal.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/understanddrupal.com\/#\/schema\/person\/73fa828d2b498d144def1204a114b7d3","name":"Mauricio Dinarte","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/understanddrupal.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/20c842c5c006728abe93e6122524f5b7?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/20c842c5c006728abe93e6122524f5b7?s=96&d=blank&r=g","caption":"Mauricio Dinarte"},"url":"https:\/\/understanddrupal.com\/fr\/blog\/author\/dinarcon\/"}]}},"_links":{"self":[{"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/posts\/3699"}],"collection":[{"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/comments?post=3699"}],"version-history":[{"count":1,"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/posts\/3699\/revisions"}],"predecessor-version":[{"id":5353,"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/posts\/3699\/revisions\/5353"}],"wp:attachment":[{"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/media?parent=3699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/categories?post=3699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/tags?post=3699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}