Preparándonos para Drupal 9

18/09/2020
Preparándonos para Drupal 9

Drupal 9 fue lanzado el 3 de junio de 2020. Teniendo esto en cuenta, es buena idea que las empresas y los usuarios consideren una actualización de Drupal 9 de su ecosistema web cuanto antes. Con las versiones anteriores de Drupal, la actualización del sistema requería una cantidad considerable de tiempo y esfuerzo, pero en este caso no sólo no es así, sino que además la facilidad de esta actualización no es la única característica nueva de Drupal 9.

¿Qué trae nuevo Drupal 9?

Hay muchas más funcionalidades en Drupal 9 además del borrado de código deprecado o la nueva versión major de Symfony.

Esta nueva versión de Drupal soporta aplicaciones headless e integraciones con datos de terceros. Además, Drupal 9 cuenta con un nuevo sistema de plantillas (layout builder), un sistema gestor de media desde WYSIWYG y herramientas de workflow de contenido que facilitan el uso de Drupal para editores.

Características de Drupal 9

Algunas de las nuevas features añadidas a Drupal 9 son muy interesantes:

1. Un code base más limpio

Drupal 9 es básicamente Drupal 8.9 sin código obsoleto. Las últimas versiones de Drupal 8 etiquetaban código que se mantendría en Drupal 8 por compatibilidad, pero que desaparecería en la siguiente major version, Drupal 9, por lo que no será soportado en el nuevo ecosistema Drupal.

La razón detrás de esto es contar con un código limpio. Con este cambio, los módulos desarrollados en Drupal 8 deberán evitar usar funciones obsoletas de core para poder ser compatibles con Drupal 9. A cambio ganarán facilidad de mantenimiento (sólo una forma, adecuada, de hacer las mismas cosas) y mejor rendimiento al contar con menos código obsoleto.

2. Actualizaciones mayores a las dependencias del core, incluyendo Symfony y Twig

Symfony 3.4 será actualizado a Symfony 4.4 y Twig a Twig 2.0. Estos cambios son major. Cualquier módulo que use funciones específicas de la versión anterior deberá actualizarse.

  • Symfony 4 es una de las versiones actuales de Symfony, por lo que está activamente mantenida y cuenta con soporte de seguridad.Symfony 4 es una de las versiones actuales de Symfony, por lo que está activamente mantenida y cuenta con soporte de seguridad.
  • Twig 2.0 ofrece mucha limpieza, dejando de mantener el soporte a versiones antiguas de PHP, corrigiendo comportamientos erróneos y, en definitiva, simplificando su estructura todo lo posible.

3. Nuevo Layout Builder

El módulo Layout Builder es trending topic en los Drupal actuales. Aunque ya estaba incluído en las últimas versiones de Drupal 8, se asienta con fuerza en el core de Drupal 9.
Este módulo permite a los editores y site builders crear plantillas visuales para mostrar contenido. Estos usuarios podrán personalizar cómo se muestra el contenido de cada página, hacerlo extensible a toda la entidad/tipo de contenido o incluso crear landing pages personalizadas con facilidad con una interfaz con drag & drop. Layout builder sustituye a otras soluciones similares como Place blocks o Panelizer.

4. Headless Drupal

Probablemente una de las mejoras más atractivas de Drupal 9. Tanto Drupal 8 como 9 cuentan con con la posibilidad de ser usados como API-first. Este cambio permite a la comunidad usar Drupal como Back-End puro, facilitando el uso de herramientas Front-End basadas en frameworks JavaScript, como React o Angular. Esto dará a los desarrolladores libertad para consumir el contenido necesario en cada momento y publicar cada componente sólamente donde sea necesario y de la forma deseada.

¿Por qué debería actualizar a Drupal 9?

Soporte para Drupal 7 y 8 termina

El soporte para Drupal 7 y 8 termina en Noviembre de 2022. Esta fecha ha sido extendida debido al COVID19 (inicialmente era 2021), pero no hay que dejarlo pasar ya que el soporte de ambas versiones vence al mismo tiempo. Esta es la primera razón y más importante para actualizar.

Actualizando desde Drupal 7

Actualizar desde Drupal 7 normalmente requiere reconstruir el portal por completo en Drupal 8 y migrar el contenido. Esto puede suponer un gran esfuerzo, pero también es una gran oportunidad para dar al sitio un nuevo look más moderno, con mejor estructura y aplicando otras mejoras (como por ejemplo, en la experiencia de usuario: UX/UI).

Drupal core weekly project usage

Actualmente hay más de un millón de portales en Drupal 7. Es importante considerar la migración desde Drupal 7 lo antes posible, ya que mantener una versión antigua y sin soporte puede ser insegura y vulnerable.

Actualizando desde Drupal 8

Si el portal en Drupal 8 se ha mantenido adecuadamente, haciendo sus actualizaciones minor (8.x), actualizar a Drupal 9 es realmente fácil. Como comentaba Dries: “The big deal about Drupal 9 is … that it should not be a big deal".

Aun así, hay que tener en cuenta algunos detalles que no deben olvidarse antes de seguir adelante con la actualización:

  • Actualizar el core a Drupal 8.8 o 8.9, un paso crucial antes de actualizar a Drupal 9.
  • Actualizar todos los módulos y temas contribuídos a su última versión. La mayoría de ellos ya contarán con soporte para Drupal 9 (habrán eliminado el código obsoleto).
  • Actualizar el código personalizado, especialmente con un ojo puesto en las deprecaciones de D9. Es necesario asegurarnos de que el código custom es compatible con la nueva versión de Drupal.
  • Verificar que el hosting y sus versiones son compatibles, ya que los requisitos de sistema de Drupal 9 cambian respecto a los de Drupal 8.
    • Apache requerirá al menos la versión 2.4.7.
    • PHP requerirá al menos la versión 7.3. PHP 7.4 también estará soportado, pero no es requerido.. Drupal 9 no tiene soporte a PHP 8 aún, pero se está trabajando en ello para que previsiblemente lo tenga en los próximos meses.
    • Si se usa Drupal 9 con MySQL o Percona se requiere la versión 5.7.8+.
    • Si se usa Drupal 9 con MariaDB, se requiere la versión 10.3.7+.
    • Si se usa Drupal 9 con SQLite, se requiere la versión 3.26+.
    • Si se usa Drupal 9 con PostgreSQL, se requiere al menos la versión 10 con la extensión pg_trgm.
    • A pesar de que el core de Drupal no requiere Drush, la mayoría de desarrolladores lo usan. En el momento de publicar esta entrada, Drupal 9 solamente admite Drush 10.

Herramientas para actualizar

Hay varias herramientas que ayudarán a validar o incluso a compatibilizar código para Drupal 9. La primera de ellas es el módulo upgrade status. Este módulo está disponible para Drupal 8 principalmente, aunque también cuenta con una versión de D7. Instalándolo, nos permitirá conocer el estado de nuestro portal para proporcionarnos un checklist de items que deberemos revisar antes de proceder a la actualización a D9.

Otra de las herramientas útiles es el módulo upgrade rector. Este módulo aporta una solución automática para facilitar que los módulos sean compatibles con Drupal 9, escaneándolos y corrigiendo los fallos más comunes en cuanto a deprecación de código.

De hecho, es reseñable que gracias a este módulo se han solucionado de forma automática más de la mitad de las actualizaciones de los 200 módulos contribuídos más usados.

Top 200 drupal.org contributed projects by status

¿Cuál es el mejor momento para actualizar?

Respuesta rápida: cuando todo esté listo. Es importante considerar que Drupal 9 cuenta con la mayoría de módulos contribuídos ya preparados para ser compatibles.

¿Qué significa esto?

Significa que hay dos cosas que deberán estar listas: el código custom y tras esto el core de Drupal.

La primera versión de Drupal 9 puede ser considerada una especie de transición, así que cuando se lance la versión de Drupal 9.2 sería un buen momento para contar ya con nuestros portales en Drupal 9. De todas formas, gracias a su compatibilidad, en este caso no habría ningún problema para los early adopters de Drupal 9, por lo que actualizarse cuanto antes también puede ser una buena idea.

Drupal tiene al framework Symfony como dependencia, que cuenta con ciclos de release de 2 años para actualizaciones major, lo que significa que el core de Drupal deberá seguir también a esta planificación para mantenerse actualizado.