Upgraden met Drush
Drush is een command line shell en scripting-interface voor Drupal. Upgraden naar Drupal 8 met Drush is een alternatief voor het gebruik van de browserinterface. Upgraden naar Drupal 8 met Drush is bijzonder nuttig bij het migreren van complexe sites, omdat je migraties één voor één kunt uitvoeren en ook kunt terugdraaien.
Installatie van Drush met Composer
Drupal 8 sites kunnen met Composer worden beheerd. Als je ervoor kiest om drupal-composer/drupal-project te gebruiken als projectsjabloon, heb je Drush al beschikbaar omdat dit is opgegeven als afhankelijkheid in het composer.json bestand van het project.
Als Drush niet als afhankelijkheid is opgegeven in jouw Composer-project, kun je Drush installeren via de opdrachtregel als volgt:
composer require drush/drush
Let op: gebruik nu Drush 9
Door een probleem met Drush 10 wordt aanbevolen Drush 9 te installeren met composer require drush/drush:^9.0, wat resulteert in versie 9.7.2.
Dit geeft je de laatste stabiele Drush, die compatibel zou moeten zijn met de laatste versie van Drupal. Zie de compatibiliteitsmatrix van Drush en Drupal voor meer informatie.
Controleer je Drush-versie met:
drush --version
Vereiste Drupal modules
Voor migratie met Drush moet je de volgende contributed modules downloaden en inschakelen:
- Migrate Upgrade: biedt Drush-ondersteuning voor upgrades van Drupal 6 of 7 naar Drupal 8.
- Migrate Plus: biedt uitbreidingen voor de basisfunctionaliteit van het migratiekader.
- Migrate Tools: levert Drush-commando’s die hieronder op deze pagina worden gebruikt.
BELANGRIJK! Zorg ervoor dat je de juiste versie kiest van elk van deze drie modules. Raadpleeg de projectpagina om de juiste versie te selecteren die compatibel is met jouw versie van Drupal 8 core.
Zie voor meer informatie over de verschillende upgrade-modules de lijst van upgrade-modules.
Definieer de bron-database
Voorbeeld van hoe je de databaseverbinding definieert voor jouw Drupal 6/7 bronsite. Als de bronsite een databaseprefix gebruikt, moet je deze ook opgeven. Je moet zowel verbinding maken met de lokale ontwikkelingsdatabase (default) als de brondatabase (D6 of D7). Hieronder een voorbeeld met Lando. Het voorbeeld bevat ook de default databaseconfiguratie voor volledigheid.
Let op: om problemen te voorkomen is het belangrijk dat de migratie-database sleutel «migrate» wordt genoemd, zie «Getting field failure for Drupal 7 core» bij migratie.
Voorbeeld instellingen in settings.php
$databases['default']['default'] = [ 'database' => 'drupal8', 'username' => 'drupal8', 'password' => 'drupal8', 'prefix' => '', 'host' => 'database', 'port' => '3306', 'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql', 'driver' => 'mysql', ]; $databases['migrate']['default'] = [ 'database' => 'drupal7db', 'username' => 'drupal7db', 'password' => 'drupal7db', 'prefix' => '', 'host' => 'd7db', 'port' => '3306', 'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql', 'driver' => 'mysql', ];
Voorbeeld .lando.yml
name: mywebsite
recipe: drupal8
config:
webroot: web
# Maak Drupal 7 database service, overweeg phpmyadmin toe te voegen
services:
d7db:
type: mariadb
creds:
user: drupal7db
password: drupal7db
database: drupal7db
portforward: true
Importeer de Drupal 7 database (aangenomen dat de dump mywebsite_db.sql.gz heet en in de huidige map staat):
lando db-import --host=d7db --user=drupal7db mywebsite_db.sql.gz
Inspiratiebron: https://github.com/thinktandem/migration_boilerplate.
Genereren van migraties met migrate-upgrade
De Migrate Tools module voegt Drush-commando’s toe zoals drush migrate-status en drush migrate-import. Een volledige lijst vind je verderop.
Als je drush migrate-status uitvoert zonder migraties aan te maken, zie je geen migraties. Dit komt doordat migraties eerst moeten worden aangemaakt op basis van de bron-database. Migrate weet anders niet welke bron moet worden gebruikt.
Om migraties aan te maken gebruik je drush migrate-upgrade, geleverd door de Migrate Upgrade module.
Vaak wil je migraties alleen configureren zodat je ze afzonderlijk kunt uitvoeren. Gebruik daarvoor de optie --configure-only:
drush migrate-upgrade --legacy-db-url=mysql://user:password@server/db --legacy-root=http://example.com --configure-only
waarbij:
- 'user' de gebruikersnaam is van de bron-database
- 'password' het wachtwoord is van de bron-database
- 'server' de database-server is
- 'db' de bron-database is
- 'http://example.com' de root van jouw bronsite is. Voor een lokale site kun je het pad naar de Drupal-root gebruiken. Dit pad wordt toegevoegd bij het importeren van bestanden.
De optie --legacy-db-key laat je een sleutel gebruiken uit $databases in settings.php.
Als jouw bron een tabelprefix gebruikt, geef die dan mee met --legacy-db-prefix, bijvoorbeeld «drupal_»:
drush migrate-upgrade --legacy-db-url=mysql://user:password@server/db --legacy-db-prefix=drupal_ --legacy-root=http://example.com --configure-only
Zonder --configure-only zal drush migrate-upgrade alle migraties meteen genereren en uitvoeren.
Na migrate-upgrade met --configure-only kun je migrate-status gebruiken om de migratielijst te bekijken:
drush migrate-status
Daarna kun je migraties afzonderlijk uitvoeren:
drush migrate-import <migration name>
Of alle migraties tegelijk uitvoeren:
drush migrate-import --all
Uitvoeren van specifieke migraties met migrate-manifest
Met een manifest-bestand kun je een specifieke set migraties instellen en uitvoeren. Dit maakt het mogelijk groepen migraties reproduceerbaar uit te voeren. Hiervoor heb je de module Migrate Manifest nodig. Je krijgt een lijst beschikbare migraties met:
drush migrate-template-list # Drush 8
of
drush migrate:template:list # Drush 9
Let op: Migrate Manifest is nog niet volledig compatibel met Drush 10+.
Migraties worden gedefinieerd in YAML zoals in dit voorbeeld:
# user
- d6_user
- d6_user_profile_field
- d6_user_profile_field_instance
- d6_user_profile_entity_display
- d6_user_profile_entity_form_display
- d6_profile_values:user
- d6_filter_format
- d6_user_role
- d6_user_picture_entity_display
- d6_user_picture_entity_form_display
- d6_user_picture_file
- d6_user_picture_field
- d6_user_picture_field_instance
# taxonomy
- d6_taxonomy_vocabulary
- d6_taxonomy_settings
- d6_taxonomy_term
# nodes
- d6_node
- d6_node_revision
- d6_node_type
- d6_view_modes
- d6_filter_format
- d6_field_instance_per_form_display
- d6_field_instance_widget_settings
- d6_field_formatter_settings
- d6_field_instance
- d6_field
- d6_field_settings
- d6_node_settings
- d6_cck_field_values:*
- d6_cck_field_revision:*
# taxonomy fields
- d6_term_node_revision
- d6_term_node
- d6_vocabulary_entity_display
- d6_vocabulary_entity_form_display
- d6_vocabulary_field_instance
- d6_vocabulary_field
# blocks
- d6_block
- d6_menu
# custom blocks
- d6_custom_block
- d6_filter_format
# book
- d6_book
- d6_book_settings
# file migrations zijn configureerbaar, zie https://www.drupal.org/node/2257723
- d6_file:
source:
conf_path: sites/assets
destination:
source_base_path: destination/base/path
destination_path_property: uri
Plaats het manifest-bestand in een map die toegankelijk is bij het draaien van Drush. Het is aangeraden dit bestand onder versiebeheer te bewaren.
Zorg ervoor dat modules die nodig zijn door de migraties in het manifest aanwezig en ingeschakeld zijn op de bronsite (bijvoorbeeld de field-module voor d6_field). Anders krijg je fouten.
Voer de manifest-migraties uit met:
drush migrate-manifest --legacy-db-url=mysql://d6user:d6pass@localhost/drupal_6 manifest.yml
Opmerkingen voor Acquia Dev Desktop gebruikers
Als je Acquia Dev Desktop gebruikt met een Drupal 6 site, zijn de standaard databasegegevens: gebruiker drupaluser, leeg wachtwoord, en poort 33067 op 127.0.0.1. Dit resulteert in een commando zoals --legacy-db-url=mysql://drupaluser:@127.0.0.1:33067/drupal_6, waarbij de db-naam drupal_6 is. Gebruik drush status om deze waarden te controleren bij verbindingsproblemen.
Drush migratie commando’s overzicht
migrate-upgrade (geen alias)
Wordt geleverd door de module Migrate Upgrade. Gebruik dit om een upgrade uit te voeren van Drupal 6/7 naar Drupal 8. Dit genereert migratieconfiguraties op basis van de configuratie en inhoud van de bronsite.
Basisvoorbeeld
drush migrate-upgrade --legacy-db-key=migrate
Opties:
- legacy-db-url: verbindingsgegevens van de brondatabase.
- legacy-db-prefix: tabelprefix van de brondatabase.
- legacy-root: pad naar de bronsite, nodig voor bestandsmigraties.
- configure-only: maak alleen migratieconfiguraties aan. Daarna kun je ze met drush migrate-import uitvoeren.
migrate-status (ms)
Wordt geleverd door Migrate Tools. Geeft een lijst met migraties en hun status.
drush migrate-status
migrate-import (mi)
Wordt geleverd door Migrate Tools. Voert een of meerdere migraties uit. Vaak gebruikt bij custom migraties vanuit externe bronnen.
drush migrate-import migration_id drush migrate-import --group=files
Opties:
- all: voer alle migraties uit.
- group: voer alle migraties uit in een groep.
- limit: aantal items per batch.
- feedback: frequentie van voortgangsrapportage.
- idlist: lijst bron-ID’s.
- update: voer updates uit voor gewijzigde data.
- force: voer uit ook als afhankelijkheden niet compleet zijn.
Gebruiksscenario’s:
- Bij gebruik van migrate-upgrade --configure-only worden alleen configuraties aangemaakt. Gebruik daarna migrate-import om migraties te draaien.
- Bij custom migratieconfiguraties gebruik je migrate-import om deze te starten.
Tip: als je custom migratieconfiguraties hebt geïmporteerd en je moet ze updaten en opnieuw importeren, gebruik dan de Configuration Update Manager module.
migrate-rollback (mr)
Wordt geleverd door Migrate Tools. Draait migraties terug. Handig voor testen of bij fouten. Gebruik met migratie-id of groep.
drush migrate-rollback migration_id drush migrate-rollback --group=files
migrate-stop (mst)
Wordt geleverd door Migrate Tools. Stopt een actieve migratie.
drush migrate-stop migration_id
migrate-reset-status (mrs)
Wordt geleverd door Migrate Tools. Zet de status van een migratie terug naar «waiting».
drush migrate-reset-status migration_id
migrate-messages (mmsg)
Wordt geleverd door Migrate Tools. Toont meldingen die zijn gelogd tijdens een migratie. Nuttig bij fouten.
drush migrate-messages migration_id
migrate-fields-source (mfs)
Wordt geleverd door Migrate Tools. Toont velden die beschikbaar zijn in de bron om te mappen.
drush migrate-fields-source migration_id