Hero

Comprendiendo las migraciones en Drupal 8

Noviembre 27, 2015

enzo
Drupal

Como ustedes saben Drupal 8 fue lanzado en 19 de noviembre del 2015 (por fin).

Una de las preguntas más recurrentes es ”Es hora de crear nuevos proyectos en Drupal 8”, pero hay otra pregunta más difícil. ”¿Cómo puedo migrar mi actual Drupal 7/6/ * a Drupal 8“.

Para tratar de responder a esta pregunta, permíteme explicarte un poco cómo funciona la migración en Drupal 8.

  1. Modules requeridos.

Drupal 8 proporciona en su núcleo el módulo Migrate, este módulo proporciona un mini framework para fácilotar la creación de migraciones desde cualquier fuente a Drupal 8. Dije cualquier fuente, porque este módulo en sí no tiene ninguna lógica relacionada con Drupal.

La idea es si va a migrar de una fuente específica como Drupal, Wordpress, CQ5 etc. Debesescribir una integración para manejar la transformación de contenido a la estructura de Drupal 8.

Afortunadamente para nosotros, por lo menos tenemos un módulo de núcleo de Drupal 8 relacionada con Drupal llamate Migrate Drupal, este módulo contiene algúnos plugins de Migración para ejecutar el proceso de migración entre versiones anteriores de Drupal a Drupal 8, pero este módulo no contiene definiciones de migración desde Drupal 8 beta 13

Por lo tanto, el primer paso que hay que hacer es instalar estos módulos, voy a utilizar el proyecto Drupal console para estas tareas y voy a seguir usando algunos comandos disponibles relacionados con la migración.

$ drupal module:install migrate migrate_drupal
  1. ¿Dónde puedo encontrar las migraciones?

Después de instalar los módulos de Migrate y Migrate Drupal, supongo que usted se estára preguntando. Donde esta la interfaz de usuario para comenzar a manejar sus migraciones. Lamentablemente no hay dicha interfaz dentro del núcleo de Drupal8. Esta responsabilidad recaeen dos contribuyeron módulos Migrate Plus y Migrar Update.

Cada módulo aplican un punto de vista diferente sobre las migraciones, En mi humilde opinión Migrate Update está en un estado más maduro. Pero, siempre hay un pero, no me gusta la idea de que sólo es posible para las migraciones disponibles cuando se está ejecutando el proceso de migración.

Con Drupal acabado de ser lanzando, es probable que estes en una etapa en la que no se sabe muy bien lo que estás haciendo, así que decidí poner en práctica algunos comando de migración dentro del proyecto Drupal Console con mi propio punto de vista.

  1. Cargado las migraciones.

Como dije antes, prefiero cargar las migraciones antes, pero sin ejecutar una migración. Para ese fin cree el comando migrate:setup, como se puede ver en el siguiente ejemploÑ

$ drupal migrate:setup --db-type=mysql --db-host=127.0.0.1 --db-name=plato_tipico --db-user=root --db-pass=root --db-port=3306 --no-interaction

En el ejemplo anterior pase todos los parámetros utilizando el modo en línea, pero si se omite una opción, el comando iniciara el modo interactivo. Recuerde que debe eliminar la opción —no-interacción, para activar el modo interactivo.

El comando anterior inspeccionará su base de datos a migrarar, para determinar la version e importar todas las migraciones disponibles en Drupal 8 para ser utilizados con su base de datos.

Todas las entides de migración creadas permanecerán en su sistema, incluso después de completar un proceso de migración.

  1. Obtener lista de las migraciones.

Para obtener una lista de las migraciones disponibles en su sistema, debe ejecutar el siguiente comando

$ drupal migrate:debug

Como se puede apreciar en la siguiente imagen, algunas migraciones trabajan en más de una versión legado Drupal

console migrate debug

  1. Ejecutar una migración.

Después de revisar su sistema en términos de migraciones disponibles, podríamos ejecutar todas las migraciones disponibles para su sistema,ejecutaando el siguiente comando para iniciar un proceso de migración completa.

$ drupal migrate:execute all --db-type=mysql --db-host=127.0.0.1 --db-name=plato_tipico --db-user=root --db-pass=root --db-port=3306 --no-interaction

A continuación se puede ver cómo se ve el proceso de migración.

console migrate execute

La imagen de arriba muestra cómo el comando informa de migraciones fallidas y satisfactorias. Como se puede ver cada migración es independiente y el proceso de migración no se interrumpe si algunos de ellos falla.

Pero si desea evitar la ejecutación de una o más migraciónespuede utilizar el parámetro —exclude proporcionando el/los id/s de migración a excluir, puede obtener los identificadores de migración usando el comando migrate:debug.

Por otra parte, si sólo desea ejecutar uno o un par de las migraciones, sólo cambia el parámetro all por cualquier id(s) lde migración deseado, esto es útil para ejecutar una migración parcial después de resolver cualquier problema después de la ejecución de un proceso de migración incompleto.

  1. ¿Dónde están ubicadas las migraciones?

Ahora te debes estar preguntando “¿Dónde se encuentran las migracióne” si no están en los modulos Migrate o Migrarte Drupal. Bueno, las migraciones se asignan en cada módulo específico, por ejemplo, si usted revisa en sus módulos del nucleo de Drupal /core/modules/book/migration_templates encuentrara algunos archivos YAML con la información necesaria para crear una entidad de Migration en su sistema. Cuando se ejecuta el comando migrate:setup se analizan todas la carpeta migration_templates para crear las entidades de migración.

  1. Advertencias.

En este momento existen en su mayoría migraciones disponibles para Drupal 6, supongo que la apuesta está relacionada a que los sitios en Drupal 6 son más críticos de migrar a Drupal 8.

Usted puede encontrar más migraciones a Drupal 7 propuestas como issues en el sandbox http://groups.drupal.org/imp, en Anexus hemos propuesto unas 70 entidades de migración para Drupal 7 y 10 de ellos ya fueron aceptados en Drupal 8, prometo publicar pronto una lista de todos estas migraciones a Drupal 7 en pocas semanas.

Espero que hayas encontrado este artículo útil.

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.