Drupal es una herramienta muy potente en el desarrollo de aplicaciones web, en pleno crecimiento y con una comunidad totalmente activa. Pero, como cualquier herramienta de desarrollo, tiene puntos débiles y carencias que los desarrolladores deben subsanar. Una de ellas, bastante significativa, es la ausencia de una herramienta en el Core que permita exportar contenidos.

Por suerte, un proyecto en Drupal también se puede nutrir de módulos contribuidos por la comunidad, aunque éstos no pertenezcan al núcleo del CMS.

Indagando en la nube de módulos y funcionalidades que nos ofrece Drupal.org, encontramos dos módulos que pueden subsanar nuestro problema: Structure Sync y Content Sync. Pero, ¿para qué sirve cada módulo? Y lo más importante, ¿en qué contexto podemos usarlos?

 

 

EXPORTAR CONTENIDOS CON CONTENT SYNC

Content Sync nos da la posibilidad de exportar contenido, archivos, bloques, taxonomías y menús desde la interfaz gráfica de Drupal. Desde la pestaña de configuración, el administrador del sistema puede exportar todas las estructuras y contenidos, o realizar las exportaciones de manera individual, en archivos comprimidos .tar.gz.

A priori, Content Sync es una herramienta muy potente y completa: puedes tener todo el contenido de tu web en un único archivo. Pero, ¿qué pasa si queremos realizar una integración continua del contenido de la web?

Content Sync no posee comandos para exportar o importar contenidos. Sólo se puede trabajar con el módulo mediante la interfaz gráfica. Si queremos integrar los contenidos en varios entornos, habría que realizar las exportaciones y las importaciones de forma manual. No es una tarea eficiente.

Content Sync Drupal - SDOS

 

 

STRUCTURE SYNC: INTEGRANDO CON DRUSH

Structure Sync es un módulo relativamente nuevo, ya que el proyecto apareció en Drupal en septiembre de 2017. Sin embargo, aporta muchas facilidades a la integración continua de proyectos en Drupal. De momento sólo es capaz de exportar e importar vocabularios y términos (taxonomías), elementos de menús y bloques personalizados, pero realiza dichas tareas tanto en la interfaz gráfica como mediante comandos.

El módulo en sí trabaja de manera independiente con cada una de las estructuras que maneja, y tiene la gran ventaja de que con tan sólo dos comandos (uno para exportar, otro para importar) podemos trasladar los contenido de un entorno a otro. Al trabajar con drush, podemos incluir el módulo en nuestro flujo de integración continua, y mantener el sitio actualizado en todo momento.

Una de las opciones que ofrece es la de la exportación e importación del contenido mediante la interfaz gráfica de Drupal. Trabaja de manera similar a Content Sync, pero permite elegir qué contenidos se quieren exportar de manera directa. La estructura es la siguiente:

Structure Sync Drupal - SDOS

 

Así que, además de la interfaz gráfica que nos ofrece en nuestra web de Drupal, tendremos las siguientes opciones en nuestro intérprete de comandos:

  • Taxonomías. Para trabajar únicamente con vocabularios y términos de taxonomía, los comandos son los siguientes:
    • drush et, para exportar.
    • drush it, para importar.
  • Bloques. Para trabajar únicamente con bloques (básicos y personalizados). Esta exportación puede llegar a dar error si el bloque posee una imagen como campo. Los comandos son los siguientes:
    • drush eb, para exportar.
    • drush ib, para importar.
  • Menús. Para trabajar únicamente con links de menús, respetando tanto los enlaces como las dependencias. Importante: Los contenidos que generan links a menús no se exportarán junto a dichos links. Los comandos son los siguientes:
    • drush em, para exportar.
    • drush im, para importar.

Estas son las opciones básicas que nos provee el módulo. Pero si queremos exportar todas las estructuras, ¿hay que hacer paso por paso todo lo anterior? La respuesta es no, ya que nos añade dos comandos extra que trabajan con las tres estructuras a la vez:

  • drush ea, para exportar los tres tipos de contenidos a la vez.
  • drush ia, para importar los tres tipos de contenidos a la vez.

Dados los comandos, pasamos al flujo que hay que seguir al realizar una exportación/importación de estructuras en un sitio web de Drupal.

 

 

FLUJO DE SINCRONIZACIÓN DE CONTENIDOS

Para explicar el flujo, vamos a utilizar los comandos más completos. Estos ofrecen más funcionalidades que los que afectan sólo a las entidades individuales. Cabe destacar que el módulo puede sufrir modificaciones que aporten más funcionalidades u ofrezcan un servicio más eficiente.

La exportación y la importación de contenido requieren que la configuración del mismo sea la correcta. Drush nos aporta comandos para ello. El comando drush cex es el encargado de exportar la configuración del sitio, y drush cim el que realiza la importación. El uso de dichos comandos de Drush es requisito indispensable para que la sincronización entre entornos sea completa.

Nos situamos en el entorno del cual queremos exportar nuestras estructuras. Accediendo al directorio raíz de nuestro proyecto, podemos empezar a usar nuestros comandos de Drush.

  • drush ea
  • drush cex

Con ello, se modifica el fichero structure_sync.data.ym (dentro del directorio de sincronización de la configuración) y los ficheros de configuración afectados por las estructuras exportadas.

Para realizar la importación, el orden de los comandos es alterno a la exportación. Es decir, primero importamos la configuración del sitio y después, las estructuras.

  • drush cim
  • drush ia

La importación de estructuras viene dividida por entidades. Es decir, para cada entidad te presenta una serie de opciones:

Flujo sincronización contenidos - import 2 rec - SDOS

 

Las opciones Full, Safe y Force sirven para insertar todas las estructuras de la entidad (menús, en nuestra imagen), y Cancel para finalizar el proceso de importación completo. Actualmente no existe una opción “skip”, que permita continuar con la importación aunque se ignore la actual, pero está en proceso de estudio. Las características son:

  • Full. Importa todas las estructuras, sobreescribiendo las anteriores, excepto las que presenten algún tipo de error o incompatibilidad.
  • Safe. Sólo importa las estructuras que se hayan añadido desde la última modificación.
  • Force. Importa todas las estructuras, ignorando los errores o incompatibilidades que puedan poseer.

Como se ha comentado, la opción Cancel detiene completamente la importación, pero no borra las importaciones realizadas en la ejecución. Esto quiere decir que si, por ejemplo, importas las taxonomías en modo Full, y al aparecer la opción de importar los bloques aplicas la opción Cancel, se detiene la ejecución. No te da la opción de importar los menús, pero las taxonomías sí han sido guardadas.

 

 

¿CON QUÉ OPCIÓN ME QUEDO?

La respuesta es simple vistas las características de ambos módulos (que no llegan a ser incompatibles entre sí): depende del flujo de trabajo y del tamaño del proyecto.

Para la realización de un proyecto pequeño, donde el número de desarrolladores es mínimo (incluso una persona), y no se requiere un flujo de integración continua en el desarrollo del proyecto, la opción de Content Sync es viable. Sin embargo, el hecho de que la exportación sea en ficheros comprimidos desde la interfaz gráfica de Drupal limita en exceso su uso.

Por ello, aunque la cantidad de entidades soportadas es menor, Structure Sync responde de manera más eficiente y lógica a un flujo de integración continua de proyectos. El hecho de que con dos comandos se puedan exportar e importar las estructuras, sin tener que pasar por la interfaz gráfica, es la clave para que su uso sea más extendido que el de Content Sync.

Ahora te toca a ti. ¿Qué herramienta te interesa más, Structure Sync o Content Sync?