Finalmente comencé a mirar Drupal 8 en serio y estoy particularmente interesado en la gestión de la configuración. Me he encontrado con algo que podría ser un poco problemático y que se refiere al contenido de bloque personalizado.
Puedo ver que el sistema de gestión de la configuración puede exportar la configuración del bloque: región, tema, peso, visibilidad, etc. Sin embargo, el contenido real del bloque no aparece en la exportación de la configuración, lo cual es razonable y comprensible.
Al importar esa configuración de bloque a un sitio de producción, lo que parece suceder es que se crea la configuración de bloque y se coloca un mensaje de retención, informando que el bloque está roto o falta. Obviamente, el contenido del bloque no existe en el servidor de producción.
¿Cómo se pueden migrar bloques personalizados de un servidor de desarrollo / preparación a un servidor de producción? Me doy cuenta de que los bloques en Drupal 8 son entidades confiables, como los nodos, por lo que deberán migrarse de la misma manera y entiendo que hay una API de Migrate en Drupal 8, pero parece estar construida para migrar contenido de sitios Drupal 6 y 7 a Drupal 8 en lugar de Drupal 8 a Drupal 8 sitios.
Este problema se refiere específicamente a los bloques personalizados, ya que los bloques generados por otros módulos, como Vistas, obviamente migrarán a través de la configuración.
Respuestas:
Otra respuesta que no he visto aquí es usar el módulo Simple Block , que es prácticamente idéntico a la configuración de 'Bloque personalizado' del núcleo, pero en lugar de tener un extraño híbrido de contenido + configuración, tiene todas las configuraciones y contenido de bloque almacenado en la configuración, que se puede exportar e importar limpiamente.
Consulte, para una discusión más detallada en Drupal 8 core: los bloques personalizados no se pueden exportar e importar correctamente .
fuente
Acabo de publicar un módulo contribuido que resuelve esto. Esencialmente, el módulo proporciona un tipo de bloque basado en la configuración (el bloque fijo) que envuelve un bloque personalizado (el bloque de contenido). Si el bloque de contenido no existe, se crea con un contenido predeterminado o está vacío si no se configuró ningún contenido predeterminado. Todo se hace a través de la interfaz de usuario, no se necesitan archivos especiales o módulos personalizados.
Lo llamé Contenido de bloque fijo y se publica en:
https://www.drupal.org/project/fixed_block_content
fuente
Otro enfoque para mantener el contenido que se agrega como parte del desarrollo que también se activa es usar el módulo Contenido predeterminado para exportar el contenido. Está diseñado para que el contenido se exporte a la carpeta 'contenido' de un perfil de instalación, y luego el módulo, si está habilitado, trae automáticamente el contenido cuando se instala el sitio, pero también es posible importar el contenido un elemento a la vez , como en un enlace de actualización, con el siguiente código en su archivo example.install o example.profile:
Exporte un bloque personalizado con un ID de 8:
(Si no configura la ruta de su perfil en la configuración de Drush , deberá especificarla arriba).
Y use la exportación resultante en su archivo example.install como este:
http://data.agaric.com/easily-add-content-update-hooks-use-default-content-module-exports-create-content-needs-be-sync-conf
fuente
No estoy seguro de ver grandes ventajas de sincronizar configuraciones de bloques entre múltiples entornos, ya que los bloques están tan entrelazados con el contenido.
La razón de esto es que se está creando un nuevo bloque a partir de los archivos yml que no tiene título / cuerpo (contenido) y, por lo tanto, está dando el mensaje 'roto / faltante'.
Puede intentar hacer que el UUID (si desea hacer el bloque en ambos lugares, asegúrese de que el nombre de la máquina coincida ...) en su tabla de desarrollo block_content coincida con el uuid que tiene en producción (las otras relaciones parecen usar la entidad carné de identidad). Luego, cuando haces una sincronización de configuración, puedes ver 'Ver diferencias' en los archivos yml y posiblemente ver qué más necesitas cambiar en el desarrollador para que coincida con los uuids de producción, etc. Lo hice funcionar, pero aún así me di cuenta Es más fácil ignorar todas las configuraciones de bloque en el código a menos que realice este proceso o cree algún tipo de sincronización de bloque de base de datos para usted usando block_content, block_content__body y block_content_field_data.
No es muy elegante, pero podría permitirle mantener sus configuraciones de bloque en el código. De lo contrario, si sigue implementando bloques con config, siempre estarán "rotos o faltantes".
Otra publicación de blog sugiere crear un bloque personalizado en un entorno en vivo pero no colocarlo. Después de sincronizar la base de datos con el desarrollo, se puede configurar el bloqueo personalizado, exportar la configuración y, dado que ya existe en la importación en vivo de la ubicación, es posible.
fuente
Al tener el mismo problema y no realmente una solución, solo adiciones: en el desarrollo colaborativo, estamos utilizando un servidor provisional que extrae del repositorio y restablece toda la configuración. Esto significa que la configuración de bloque se restablece automáticamente, simplemente no puede colocar bloques que considere "contenido" directamente en ese servidor.
Es fácil usar la sincronización drush config-export mientras se sabe exactamente lo que ha hecho y se asegura de que cualquier cambio de configuración esté destinado a la implementación. Pero Drupal decide por nosotros que los bloques son configuración (mientras que obviamente el contenido del bloque se maneja como contenido). Así que esto parece estar roto por diseño.
Por el tiempo dado, creo que la solución más práctica sería agregar los archivos yml relacionados con el bloque a .gitignore.
fuente
Sin embargo, no estoy seguro, si no encontró ninguna solución, puede consultar este módulo https://www.drupal.org/project/deploy . Hablando francamente, no recuerdo que pueda implementar bloques de inserción de DEV a PROD o no.
fuente
Creo que la mejor manera de manejar esto sería:
Esto es lo que generalmente veo a las personas usando y yo personalmente uso. Pero sincroniza toda la base de datos en comparación con solo el contenido del bloque.
fuente
Tenga manos en el módulo de sincronización de estructura .
Pasos:
fuente