Excluir configuración de importación / exportación

16

Pensé que este era un caso de uso simple del nuevo sistema de gestión de configuración, pero no he tenido la suerte de descubrir cómo resolver esto:

Problema

Quiero almacenar la configuración en git y usar drush para exportar la configuración durante el desarrollo y luego, en la implementación, importar la configuración. Bastante similar a hacer una reversión de funciones en Drupal 7. Mi problema es que no quiero almacenar códigos de acceso en git para varias integraciones. Esto da como resultado que estas configuraciones se eliminen en
$ drush cim -y

Donde miré

Esperaba que hubiera una lista / configuración simple para las configuraciones que deberían excluirse en la importación / exportación. Parece que hubo en algún momento, pero debe haberse eliminado nuevamente, ya que está disponible en la versión actual de Drupal 8.

Miré cómo se realizan los cambios de configuración comparando el rango activo y de sincronización para ver si hay un lugar donde podría eliminar los cambios, este no parece ser el caso. Miré cómo drush importa la configuración ya que tiene algunas exclusiones de configuración propias, pero no parecía que esto fuera extensible. Lo miré ConfigEvents, pero todo esto parece suceder después de una importación, por lo que no parece que se pueda usar.

¿Me estoy perdiendo algo o no es posible simplemente excluir configuraciones de importación / exportación?

googletorp
fuente

Respuestas:

7

No es posible tener exclusiones específicamente, pero hay algo.

Al igual que $ conf en Drupal 7, hay $ config en settings.php que puede usar para anular cualquier cosa en la configuración local. El formato es $config['name.of.config']['nested']['key'].

Tenga en cuenta que todo lo que esté almacenado en la configuración todavía está en git, por lo que debe mantener ninguno o sus códigos de acceso de prueba en git. Además, la interfaz de usuario mostrará lo que realmente está almacenado en la configuración y actualmente no proporcionará ninguna indicación de que está anulado. Hay cuestiones pendientes para mejorar eso.

Entiendo que esto tiene limitaciones, pero en este momento, no es posible mantener algo fuera de la configuración exportada. Por lo que sé.

Berdir
fuente
Entonces, básicamente, debe establecer / actualizar la configuración en su archivo settings.php en lugar de usar la interfaz.
googletorp
Sí, esto no es nada nuevo. Nada ha cambiado en el flujo de trabajo en este contexto en d8.
11

Puede usar el módulo "Ignorar configuración": https://www.drupal.org/project/config_ignore

¿Alguna vez experimentó que la configuración de su sitio fue anulada por la configuración en el sistema de archivos, al hacer un cush drush?

¡Ya no!

Este módulo es una herramienta que le permite mantener la configuración que desea, en su lugar.

Weri
fuente
2
config_ignore es probablemente la solución más estable y simple actualmente disponible, y esta solución probablemente responde mejor al deseo del OP de tener "una lista / configuración simple para configuraciones que deberían excluirse en la importación / exportación"
bdanin
7

Puede usar una combinación de config_ignore y config_split para esto.

Config ignore le permite ignorar un subconjunto de entidades de configuración durante la importación (también evita las eliminaciones desde la versión 2.x). Desafortunadamente, no impide excluir la configuración durante la exportación.

Para excluir entidades de configuración durante la exportación, puede usar config_split, crear una nueva entidad config_split y dejar la carpeta vacía. Esto evita que la configuración se exporte al sistema de archivos; en cambio, lo exporta a la base de datos.

Escribí Excluir configuración de la administración de configuración en Drupal 8 sobre este tema.

Geert van Dort
fuente
5

Para dividir las configuraciones, puede usar https://www.drupal.org/project/config_split .

Ingrese config_split que proporciona un comando de consola Drupal para importar y exportar la configuración filtrada. Es probable que la integración de drush siga pronto (después de todo, el filtro está inspirado en el filtro de drush --skip-modules).

Puede dividir las exportaciones en diferentes directorios que luego puede ignorar.

Hubo una muy buena presentación en drupal con dublin 2016 por parte de los responsables de la iniciativa CMI que les insto a que revisen sin importar qué.

Interruptores Potney
fuente
2

Acabo de probar @berdir en la respuesta n. ° 1 y funciona perfectamente. Solo agrego una pequeña nota: tienes que poner toda la configuración en esta var, completa. Sin ello, $ config var no se ejecuta correctamente.

Algo como esto:

 $config['language.negotiation'] = array(
  'session' => array(
    'parameter' => 'language',
  ),
  'url' => array(
    'source' => 'domain',
    'prefixes' => array(
      'es' => '',
      'pt-br' => '',
    ),
    'domains' => array(
      'es' => 'YourLocalDomain',
      'pt-br' => 'Anotherlocaldomain',
    ),
  ),
  'selected_langcode' => 'site_default',
  'langcode' => 'es',
);

Documentación: https://www.drupal.org/node/1928898

Nota de la documentación anterior: "Tenga en cuenta que los valores anulados a través de $ config dentro de settings.php no serán visibles desde la interfaz de administración de Drupal".

estoyausente
fuente
3
No deberías tener que hacer esto. Debería fusionarse en cualquier valor que defina, pero tal vez no funcione como se espera con algunas estructuras.
Berdir
Oh, no pude ejecutarlo correctamente. Intentaré depurarlo nuevamente y, si no se ejecuta correctamente, tal vez pueda abrir un error en d.org. ¡Gracias!
estoyausente
1
Puedo confirmar que puedes hacer algo como$config['module.settings']['some']['value'] = 'foo';
googletorp
2

De alguna manera me pregunto por qué nadie mencionó las herramientas Drush CMI por ahora. Las palabras mágicas son drush cexyy config-ignore.yml. Tendrás una lista que puedes ajustar. Lo necesitábamos una vez para excluir las instancias de bloque mientras que al mismo tiempo se procesaban las bases de bloque.

Queremos exportar toda la configuración, pero queremos excluir ciertos patrones.

Aquí es donde entra la --ignore-listopción de drush cexy.

En nuestro proyecto tenemos una carpeta ./drush, por lo que pegamos un archivo en su llamado config-ignore.yml con el contenido de la siguiente manera.

ignore:
  - field.field.contact_message.*
  - field.storage.contact_message.*
  - contact.form.*
  - core.entity_form_display.contact_message*
  - core.entity_form_display.contact_form*
  - core.entity_view_display.contact_message*
  - core.entity_view_display.contact_form*
  - system.site
  - workbench_email.workbench_email_template.*

Así que ahora corremos drush cexyasí

drush cexy --destination=/path/to/config-export --ignore-list=/path/to/drush/config-ignore.yml

Entonces, lo que esto hace es exportar la configuración activa y luego aplicar la lista de ignorados para eliminar la configuración no deseada.

Entonces, cuando ejecute git status, solo debería ver los cambios que desea confirmar.

Fuente: https://www.previousnext.com.au/blog/introducing-drush-cmi-tools

Instalación

cd ~/.drush
wget https://raw.githubusercontent.com/previousnext/drush_cmi_tools/8.x-1.x/drush_cmi_tools.drush.inc
drush cc drush

Fuente: https://github.com/previousnext/drush_cmi_tools

leymannx
fuente
1

Usar config split (recomendado)

El módulo de división de configuración se hizo específicamente para esta necesidad.

La división de configuración está integrada con drush.

Usar solo Drush

Drush también se supone que puede hacer eso usando la --skip-modulesbandera.

Puede agregar las siguientes líneas en un drupal / drushrc.php en la raíz web de su proyecto para hacerlo automáticamente.

$command_specific['config-export']['skip-modules'] = array('devel');
$command_specific['config-import']['skip-modules'] = array('devel');

Ver http://www.drush.org/en/master/config-exporting/#ignoring-development-modules

Lamentablemente, hay un error con esta funcionalidad: https://github.com/drush-ops/drush/issues/1820 . Entonces, por el momento, también necesita agregar esos archivos de configuración en su .gitignore para que los archivos de configuración exportados no se comprometan. Es posible que abandone esta funcionalidad (con errores) de drush a favor de la división de configuración.

gagarina
fuente
2
Ignorar los archivos de configuración en git no funciona exactamente. La configuración no exportada se eliminará. Por ejemplo, las páginas de paneles personalizados se eliminarán al importar la configuración.
dobrzyns
@ user157272 incluso si importa utilizando drush con ['config-import'] ['skip-modules']?
gagarine
drushrc.php incluso se puede colocar fuera de webroot. Por ejemplo, un nivel superior, que es útil cuando trabaja con Drupal en una configuración de compositor: github.com/drupal-composer/drupal-project .
leymannx
Esto no funcionó para mí. Agregué módulos, pero todavía se agregaron a la configuración de habilitar / deshabilitar módulos.
Jeremy John
Actualicé