Prérequis:

Projet Redmine élaboré par Kienan avec image Vagrant pour faire de la formation sur migration D6/D7 et D8

Consultez la documentation suivante:

Approche simple

Avant

Pendant

Approche avancé

1. Télécharger les modules suivantes et les activer. Fasses attention de prendre des versions qui supportent la version de drupal 8 vous importez vers.

2. Activer aussi le module migrate (et facultativement, migrate_ui) du coeur de drupal 8.

3. Activer les versions Drupal 8 des modules besoin, tel que book, etc.

4. Activer la localisation et traduction si nécessaire. Configurer la language par défaut en corréspondance avec les paramétrages du site source.

5. Prendre un backup (drush ard)

6. Ajouter les informations de connection de base de données dans le fichier local.settings.php à la racine du site d8. Nommer la base de données "drupal_6".

#Exemple

$databases['drupal_6']['default'] = array(
  'database' => 'xx',
  'username' => 'xx',
  'password' => 'xx',
  'port' => 3306,
  'host' => 'mysql.aegir.koumbit.net',
  'driver' => 'mysql',
  'prefix' => '',
);

7. Étape pour la création des migrations automatique:

drush migrate-upgrade --legacy-db-key=drupal_6 --legacy-root=http://monsite_d6.xyz --migration-prefix='' --configure-only

Il y a un bogue dans l'importateur et les migrations qui ont un préfixe ne fonctionneront pas. Le préfixe est défini par défaut par migrate-upgrade est "upgrade_".

8. Rouler toute les migrations:

drush migrate-import --all

Note: Pour les projets complexes considérer l'utilisation de migrate manifest pour clairement démontrer l'ordre des migrations.

Erreurs Fréquents

Migration failed with source plugin exception: base table of view not found: table X.i18n_varible

Si la localisation des variables n'est pas activé dans le site source, cette message ne devrait pas poser de problème.

Missing filter plugin: filter_null

Dans l'interface d'administration re-sauvegarder les filtres qui sont crées lors d'la migration.

Note: Ceci cause les contenus utilisant les filtres affectés à ne pas afficher de quoi avant que le filtre soit re-sauvegarder.

Migration des "Image" du module image ne transfer pas

Image nodes

Forgot to enable modules?

  1. Dump configuration to disk and save (eg. in git)
  2. Revert all migrations : drush mr --all.

  3. Through the interface, delete the migration group that was created: Structure -> Migrations (/admin/structure/migrate)

  4. Re-run migrate-upgrade to regenerate the migrations.

  5. Dump configuration to disk, and merge relevant changes from before
  6. Import upgrade configuration drush config-import sync

  7. Run migrations again.

Création des migrations custom

À faire...

Notes Emm pour l'approche avancée (drush)

* Je vais réorganiser ces notes plus tard. -- EmmanuelDecarie 2018-09-14 16:11:41

Lister les modules existants dans Drupal 6

drush pml --no-core --status=enabled > noms_modules_du_site.csv

 Package                          Nom                                                               Type    Version 
 Access control                   Content Access (content_access)                                   Module  6.x-1.2 
 Administration                   Admin Role (adminrole)                                            Module  6.x-1.3 
 Administration                   Administration menu (admin_menu)                                  Module  6.x-1.9 
 Autre                            Advanced help (advanced_help)                                     Module  6.x-1.3 
 Autre                            Automatic Nodetitles (auto_nodetitle)                             Module  6.x-1.2 
 Autre                            BUEditor (bueditor)                                               Module  6.x-2.10
(...)

Pour obtenir que le nom machine des modules:

drush pml --no-core --status=enabled --pipe > noms_machine_modules_du_site.csv

content_access
adminrole
admin_menu
advanced_help
auto_nodetitle
bueditor
conditional_styles
custom_pagers
(...)

$ drush pml --no-core --status=enabled --pipe

migrate_upgrade
migrate_manifest
migrate_plus
migrate_tools

D'abord on fait une copie de sauvegarde du site avec

$ drush ard

# ou à ce stade-ci on peut juste sauvegarder la bd

$ drush cr
$ drush sql-dump > nom_du_site.d8.`date +%F`.sql

$ while read module; do drush dl $module; done < le_site_modules_d6_noms_machine.txt

# dans le D8 du site
$ cd /modules
$ for module in *; do echo "https://www.drupal.org/project/"$module; done > /tmp/modules.d8.txt

# ça va nous donner un fichier qui va contenir quelque chose comme ceci:

https://www.drupal.org/project/advanced_help
https://www.drupal.org/project/blog
https://www.drupal.org/project/blogapi
https://www.drupal.org/project/bueditor
https://www.drupal.org/project/calendar
https://www.drupal.org/project/conditional_styles
(...)

* On peut ensuite télécharger le fichier modules.d8.txt sur notre machine et rouler un script bash pour ouvrir toutes les pages avec notre fureteur (ici chromium):

# remplacer chromium-browser par firefox si on veut utiliser ce dernier
$ while read module;do chromium-browser $module;done < modules.d8.txt

Migrate Tools

migrate-status - Lists migrations and their status.
migrate-import - Performs import operations.
migrate-rollback - Performs rollback operations.
migrate-stop - Cleanly stops a running operation.
migrate-reset-status - Sets a migration status to Idle if it's gotten stuck.
migrate-messages - Lists any messages associated with a migration import.

General notes

Migrate Plus Module

Core Migration Modules

Migrate Module

Migrate Drupal

Migrate Drupal UI

Migration Templates

Extract, Transform, and Load

Source Plugins

# Example from a migration plugin YAML file:

source:
  plugin: baseball_player

There are generic source plugins:

Source plugins live in the Drupal\{MY_MODULE}\Plugin\migrate\source
namespace. In our case this will be
Drupal\baseball_migration\Plugin\migrate\source, with our code living in
the file baseball_migration/src/Plugin/migrate/source/BaseballPlayer.php.

Write a Custom Source Plugin | Drupalize.Me : https://drupalize.me/tutorial/write-custom-source-plugin?p=2578

Migrate source plugins implement
\Drupal\migrate\Plugin\MigrateSourceInterface and often extend
\Drupal\migrate\Plugin\migrate\source\SourcePluginBase. They are annotated
with the \Drupal\migrate\Annotation\MigrateSource annotation and must
be at src/Plugin/migrate/source of the module that defines them.

Source Plugins | Drupalize.Me : https://drupalize.me/tutorial/source-plugins?p=2578

Example of source plugins from the Drupal core: 78 classes are annotated with MigrateSource

Process Plugins

Example with the concat plugin:

# We generate the node.title (which we treat as the name) by concatenating
# two soure fields together and putting a space between them
title:
  plugin: concat
  source:
    - nameFirst
    - nameLast
  delimiter: " "

Process Plugins | Drupalize.Me : https://drupalize.me/tutorial/process-plugins?p=2578

Destination Plugins

Contributed Modules: The Big Three

Migrate Tools

Drush commands supported include:

    migrate-status - Lists migrations and their status.
    migrate-import - Performs import operations.
    migrate-rollback - Performs rollback operations.
    migrate-stop - Cleanly stops a running operation.
    migrate-reset-status - Sets a migration status to Idle if it's gotten stuck.
    migrate-messages - Lists any messages associated with a migration import.

Migrate Tools | Drupal.org : https://www.drupal.org/project/migrate_tools

Migrate Update

# example:

drush migrate-upgrade --legacy-db-url=mysql://user:pass@12.34.56.78/d6db --legacy-root=http://myd6site.com  --configure-only

Migrate Plus

Contributed Modules: Others

Migrate Manifest

Migrate Source CSV

Migrate Maps

MariaDB [recitprescodev1a]> select * from migrate_map_                                                                 
Display all 969 possibilities? (y or n)                                                                                
migrate_map_block_content_body_field                                  migrate_map_d6_node_book.sourceid1               
migrate_map_block_content_body_field.destid1                          migrate_map_d6_node_calendrier                   
migrate_map_block_content_body_field.destid2                          migrate_map_d6_node_calendrier.destid1           
migrate_map_block_content_body_field.destid3                          migrate_map_d6_node_calendrier.hash              
migrate_map_block_content_body_field.hash                             migrate_map_d6_node_calendrier.last_imported     
migrate_map_block_content_body_field.last_imported                    migrate_map_d6_node_calendrier.rollback_action   
migrate_map_block_content_body_field.rollback_action                  migrate_map_d6_node_calendrier.source_ids_hash   
migrate_map_block_content_body_field.source_ids_hash                  migrate_map_d6_node_calendrier.source_row_status 
migrate_map_block_content_body_field.source_row_status                migrate_map_d6_node_calendrier.sourceid1         
migrate_map_block_content_body_field.sourceid1                        migrate_map_d6_node_formations                   
migrate_map_block_content_body_field.sourceid2                        migrate_map_d6_node_formations.destid1           
migrate_map_block_content_body_field.sourceid3                        migrate_map_d6_node_formations.hash              
migrate_map_block_content_entity_display                              migrate_map_d6_node_formations.last_imported     
migrate_map_block_content_entity_display.destid1                      migrate_map_d6_node_formations.rollback_action   
migrate_map_block_content_entity_display.destid2                      migrate_map_d6_node_formations.source_ids_hash   
migrate_map_block_content_entity_display.destid3                      migrate_map_d6_node_formations.source_row_status 

Par exemple si on migre la node 1690 avec avec le fichier yaml migrate_plus.migrate.d6_node_album.yml de la manière suivante:

$ drush migrate-import d6_node_album --idlist=1690

On peut explorer migragte_map_d6_node_album :

MariaDB [recitprescodev1a]> select * from migrate_map_d6_node_album;
+------------------------------------------------------------------+-----------+---------+-------------------+-----------------+---------------+------+
| source_ids_hash                                                  | sourceid1 | destid1 | source_row_status | rollback_action | last_imported | hash |
+------------------------------------------------------------------+-----------+---------+-------------------+-----------------+---------------+------+
| 0e567e0ba28d9c4b12eba02737464bb2b773a667fda0ebeeb7efd86873fb7411 |      1690 |    1690 |                 0 |               1 |             0 |      |
+------------------------------------------------------------------+-----------+---------+-------------------+-----------------+---------------+------+
1 row in set (0.00 sec)

Migrate Manifest

Conversion module Drupal 7 en Drupal 8

Résolution des problèmes

Version de migrate_upgrade

drush config-import sync

Migration migration_exemple is busy with another operation

Migration migration_exemple is busy with another operation

drush migrate-reset-status migration_exemple

<none> block

ÉquipeWeb/Drupal/MAJ/MAJMajeur/8 (last edited 2021-10-09 10:37:07 by emmanuel)