Escludere la configurazione dall'importazione / esportazione


16

Ho pensato che fosse un semplice caso d'uso del nuovo sistema di gestione della configurazione, ma non ho avuto fortuna a scoprire come risolverlo:

Problema

Voglio archiviare la configurazione in git e usare drush per esportare la configurazione durante lo sviluppo e quindi al momento dell'importazione importare la configurazione. Abbastanza simile a fare un ripristino delle funzionalità in Drupal 7. Il mio problema è che non voglio archiviare i codici di accesso in git per varie integrazioni. Ciò comporta l'eliminazione di queste configurazioni
$ drush cim -y

Dove ho guardato

Speravo che ci fosse un semplice elenco / configurazione per le configurazioni che dovrebbero essere escluse all'importazione / esportazione. Sembra che ci sia stato ad un certo punto, ma deve essere stato rimosso di nuovo, poiché è disponibile nella versione attuale di Drupal 8.

Ho esaminato il modo in cui vengono apportate modifiche alla configurazione confrontando lo storange attivo e di sincronizzazione per vedere se esiste un luogo in cui è possibile rimuovere le modifiche, ma questo non sembra essere il caso. Ho visto come drush importa la configurazione in quanto ha una configurazione che esclude la sua, ma non sembrava che questo fosse estensibile. Ho osservato ConfigEvents, ma tutto sembra accadere dopo un'importazione, quindi non sembra che questo possa essere usato.

Mi sto perdendo qualcosa o non è possibile escludere semplicemente le configurazioni dall'importazione / esportazione?

Risposte:


7

Non è possibile escludere in modo specifico, ma c'è qualcosa.

Proprio come $ conf in Drupal 7, c'è $ config in settings.php che puoi usare per sovrascrivere qualsiasi cosa nella configurazione localmente. Il formato è $config['name.of.config']['nested']['key'].

Si noti che tutto ciò che è memorizzato nella configurazione è ancora in git, quindi è necessario mantenere nessuno o i codici di accesso di prova in git. Inoltre, l'interfaccia utente mostrerà ciò che è effettivamente memorizzato in config e attualmente non fornirà alcuna indicazione che sia stato sostituito. Ci sono problemi in sospeso per migliorarlo.

Capisco che questo ha dei limiti, ma al momento non è possibile mantenere qualcosa fuori dalla configurazione esportata. Per quanto ne so.


Quindi, fondamentalmente, devi impostare / aggiornare la configurazione nel tuo file settings.php invece di usare l'interfaccia.
googletorp

Sì, questa non è una novità. Non è cambiato nulla nel flusso di lavoro in questo contesto in d8.

11

È possibile utilizzare il modulo "Config Ignore": https://www.drupal.org/project/config_ignore

Hai mai provato che la configurazione del tuo sito è stata sovrascritta dalla configurazione sul filesystem, quando hai fatto un drush cim?

Non più!

Questo modulo è uno strumento che ti consente di mantenere la configurazione desiderata, in atto.


2
config_ignore è probabilmente la soluzione più stabile e semplice attualmente disponibile, e questa soluzione probabilmente risponde meglio al desiderio dell'OP di avere "un elenco / configurazione semplice per le configurazioni che dovrebbero essere escluse all'importazione / esportazione"
bdanin

7

Per questo puoi usare una combinazione di config_ignore e config_split .

Config ignore consente di ignorare un sottoinsieme di entità di configurazione durante l'importazione (impedisce anche le eliminazioni dalla versione 2.x). Purtroppo non impedisce l'esclusione della configurazione durante l'esportazione.

Per escludere entità di configurazione durante l'esportazione, è possibile utilizzare config_split, creare una nuova entità config_split e lasciare vuota la cartella. Ciò impedisce che la configurazione venga esportata nel file system; invece, lo esporta nel database.

Ho scritto Exclude config dalla gestione della configurazione in Drupal 8 su questo argomento.


5

Per dividere le configurazioni è possibile utilizzare https://www.drupal.org/project/config_split .

Immettere config_split che fornisce un comando della console Drupal per l'importazione e l'esportazione della configurazione filtrata. È probabile che presto segua l'integrazione Drush (dopo tutto il filtro è ispirato al filtro --skip-modules di Drush).

Puoi dividere le esportazioni in diverse directory che puoi ignorare.

C'è stata una bella presentazione a drupal con dublin 2016 da parte dei responsabili dell'iniziativa CMI che vi esorto a dare un'occhiata, non importa quale.


2

Ho appena testato @berdir nella risposta n. 1 e funziona perfettamente. Solo io aggiungo un piccolo appunto: devi inserire tutta la configurazione in questo var, completa. Senza di esso, $ config var non funziona correttamente.

Qualcosa come questo:

 $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',
);

Documentazione: https://www.drupal.org/node/1928898

Nota dalla documentazione sopra: "Nota che i valori sovrascritti da $ config all'interno di settings.php non saranno visualizzabili dall'interfaccia di amministrazione di Drupal."


3
Non dovresti farlo. Dovrebbe fondersi con tutti i valori definiti, ma forse non funziona come previsto con alcune strutture.
Berdir,

Oh, non sono riuscito a farlo funzionare correttamente. Proverò di nuovo a eseguirne il debug e, se non eseguito correttamente, potrei aprire un bug in d.org. Grazie!
estoyausente

1
Posso confermare che puoi fare qualcosa del genere$config['module.settings']['some']['value'] = 'foo';
googletorp

2

In qualche modo mi chiedo perché ormai nessuno abbia menzionato gli strumenti Drush CMI . Le parole magiche sono drush cexye config-ignore.yml. Avrai un elenco che puoi regolare. Ne avevamo bisogno una volta per escludere le istanze di blocco mentre allo stesso tempo venivano elaborate le basi dei blocchi.

Vogliamo esportare tutta la configurazione, ma vogliamo escludere determinati schemi.

È qui che entra in gioco l' --ignore-listopzione drush cexy.

Nel nostro progetto abbiamo una cartella ./drush, quindi incolliamo un file nel loro nome config-ignore.yml con i contenuti come segue.

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.*

Quindi ora corriamo drush cexycosì

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

Quindi, ciò che fa è esportare la configurazione attiva e quindi applicare l'elenco ignora per rimuovere la configurazione indesiderata.

Quindi ora quando corri git statusdovresti vedere solo le modifiche che vuoi impegnare.

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

Installazione

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

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


1

Uso della divisione di configurazione (consigliata)

Il modulo split di configurazione è stato creato appositamente per questa esigenza.

Config split è integrato con drush.

Utilizzando solo Drush

Drush dovrebbe anche essere in grado di farlo usando la --skip-modulesbandiera.

Puoi aggiungere le seguenti righe in un drupal / drushrc.php nella webroot del tuo progetto per farlo automaticamente.

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

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

Purtroppo c'è un bug con questa funzionalità: https://github.com/drush-ops/drush/issues/1820 . Quindi per il momento devi anche aggiungere quei file di configurazione nel tuo .gitignore in modo che i file di configurazione esportati non vengano impegnati. È in corso forse l'abbandono di questa funzionalità (buggy) dalla droga a favore della divisione di configurazione.


2
Ignorare i file di configurazione in git non funziona esattamente. La configurazione non esportata verrà eliminata. Ad esempio, le pagine dei pannelli personalizzati verranno eliminate durante l'importazione della configurazione.
Dobrzyns,

@ user157272 anche se si importa usando drush con ['config-import'] ['skip-modules']?
Gagarine,

drushrc.php può anche essere posizionato al di fuori di webroot. Ad esempio un livello superiore, utile quando si lavora con Drupal in una configurazione del compositore: github.com/drupal-composer/drupal-project .
leymannx,

Questo non ha funzionato per me. Ho aggiunto i moduli, ma sono stati ancora aggiunti alla configurazione dei moduli di abilitazione / disabilitazione.
Jeremy John,

Ho aggiornato la risposta con le migliori pratiche attuali (suddivisione della configurazione)
gagarine,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.