Konfiguration vom Import / Export ausschließen

16

Ich dachte, dies sei ein einfacher Anwendungsfall für das neue Konfigurationsmanagementsystem, aber ich hatte kein Glück, herauszufinden, wie dies gelöst werden kann:

Problem

Ich möchte die Konfiguration in git speichern und drush verwenden, um die Konfiguration während der Entwicklung zu exportieren und dann bei der Bereitstellung die Konfiguration zu importieren. Ähnlich wie beim Zurücksetzen von Funktionen in Drupal 7. Mein Problem ist, dass ich für verschiedene Integrationen keine Zugangscodes in git speichern möchte. Dies führt dazu, dass diese Konfigurationen am gelöscht werden
$ drush cim -y

Wo ich hingeschaut habe

Ich hatte gehofft, dass es eine einfache Liste / Konfiguration für Configs geben würde, die beim Import / Export ausgeschlossen werden sollten. Es scheint, dass es irgendwann gab, aber es muss wieder entfernt worden sein, da es derzeit in Drupal 8 verfügbar ist.

Ich habe untersucht, wie Konfigurationsänderungen vorgenommen werden, indem der aktive Speicher und der Synchronisierungsspeicher verglichen werden, um festzustellen, ob es einen Ort gibt, an dem ich Änderungen entfernen kann. Dies schien jedoch nicht der Fall zu sein. Ich habe mir angesehen, wie drush den Konfigurationsimport durchführt, da er einige eigene Konfigurationen ausschließt, aber es sah nicht so aus, als wäre dies erweiterbar. Ich habe nachgesehen ConfigEvents, aber diese scheinen alle nach einem Import zu passieren, also sieht es nicht so aus, als ob dies verwendet werden kann.

Fehlt mir etwas oder können Configs nicht einfach vom Import / Export ausgeschlossen werden?

googletorp
quelle

Antworten:

7

Es ist nicht möglich, Ausschlüsse speziell zu haben , aber es gibt etwas.

Genau wie $ conf in Drupal 7 gibt es $ config in settings.php, mit dem Sie alles in der Konfiguration lokal überschreiben können. Das Format ist $config['name.of.config']['nested']['key'].

Beachten Sie, dass sich alles, was in der Konfiguration gespeichert ist, immer noch in git befindet. Sie müssen also entweder keinen oder Ihre Testzugriffscodes in git behalten. Außerdem zeigt die Benutzeroberfläche an, was tatsächlich in der Konfiguration gespeichert ist, und zeigt derzeit nicht an, dass sie überschrieben wurde. Es sind noch Fragen offen, um dies zu verbessern.

Ich verstehe, dass dies Einschränkungen hat, aber im Moment ist es nicht möglich, etwas aus der exportierten Konfiguration herauszuhalten. Soweit ich weiss.

Berdir
quelle
Daher müssen Sie die Konfiguration in Ihrer settings.php-Datei festlegen / aktualisieren, anstatt die Benutzeroberfläche zu verwenden.
googletorp
Ja, das ist nichts Neues. In diesem Zusammenhang hat sich in d8 nichts am Workflow geändert.
11

Sie können das Modul "Config Ignore" verwenden: https://www.drupal.org/project/config_ignore

Haben Sie schon einmal erlebt, dass die Konfiguration Ihrer Site durch die Konfiguration im Dateisystem überschrieben wurde, als ein drush cim ausgeführt wurde?

Nicht länger!

Dieses Modul ist ein Tool, mit dem Sie die gewünschte Konfiguration beibehalten können.

Weri
quelle
2
config_ignore ist wahrscheinlich die stabilste und einfachste derzeit verfügbare Lösung, und diese Lösung kommt dem Wunsch des OP nach einer "einfachen Liste / Konfiguration für Konfigurationen, die beim Import / Export ausgeschlossen werden sollen"
bdanin
7

Sie können hierfür eine Kombination aus config_ignore und config_split verwenden .

Mit Config ignore können Sie eine Teilmenge der Konfigurationsentitäten während des Imports ignorieren (verhindert auch das Löschen seit der Version 2.x). Leider verhindert dies nicht das Ausschließen von config während des Exports.

Um Konfigurationsentitäten beim Export auszuschließen, können Sie config_split verwenden, eine neue config_split-Entität erstellen und den Ordner leer lassen. Dadurch wird verhindert, dass die Konfiguration in das Dateisystem exportiert wird. Stattdessen wird es in die Datenbank exportiert.

In Drupal 8 habe ich Exclude config from configuration management zu diesem Thema geschrieben.

Geert van Dort
quelle
5

Zum Teilen von Konfigurationen können Sie https://www.drupal.org/project/config_split verwenden .

Geben Sie config_split ein, das einen Drupal-Konsolenbefehl zum Importieren und Exportieren gefilterter Konfigurationen bereitstellt. Die Drush-Integration wird wahrscheinlich bald folgen (schließlich ist der Filter vom --skip-modules-Filter von drush inspiriert).

Sie können Exporte in verschiedene Verzeichnisse aufteilen, die Sie dann ignorieren können.

Die Verantwortlichen der CMI-Initiative haben auf der drupal con dublin 2016 einen sehr schönen Vortrag gehalten, den Sie unbedingt überprüfen sollten.

Potney Switters
quelle
2

Ich habe gerade @berdir in # 1 Antwort getestet und es läuft perfekt. Nur ich füge eine kleine Anmerkung hinzu: Sie müssen die gesamte Konfiguration in diese Variable einfügen, vollständig. Ohne es läuft $ config var nicht richtig.

Etwas wie das:

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

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

Hinweis aus der obigen Dokumentation: "Beachten Sie, dass über $ config in settings.php überschriebene Werte in der Drupal-Administrationsoberfläche nicht angezeigt werden können."

estoyausente
quelle
3
Sie sollten dies nicht tun müssen. Es sollte in allen von Ihnen definierten Werten zusammengeführt werden, funktioniert jedoch bei einigen Strukturen möglicherweise nicht wie erwartet.
Berdir
Oh, ich konnte es nicht richtig machen. Ich werde versuchen, es erneut zu debuggen und wenn es nicht richtig läuft, kann ich vielleicht einen Fehler in d.org öffnen. Vielen Dank!
estoyausente
1
Ich kann bestätigen, dass Sie so etwas tun können$config['module.settings']['some']['value'] = 'foo';
googletorp
2

Ich frage mich, warum bis jetzt noch niemand Drush CMI-Tools erwähnt hat . Die Zauberwörter sind drush cexyund config-ignore.yml. Sie haben eine Liste, die Sie anpassen können. Wir brauchten es einmal, um Blockinstanzen auszuschließen, während gleichzeitig die Blockbasen verarbeitet wurden.

Wir wollen die gesamte Konfiguration exportieren, aber wir wollen bestimmte Muster ausschließen.

Hier kommt die --ignore-listOption von ins drush cexySpiel.

In unserem Projekt haben wir einen ./drush-Ordner, so dass wir eine Datei mit folgendem Inhalt in der Datei config-ignore.yml ablegen .

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

Also jetzt rennen wir drush cexyso

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

Exportieren Sie also die aktive Konfiguration und wenden Sie die Ignorierliste an, um unerwünschte Konfigurationen zu entfernen.

Wenn Sie jetzt ausführen git status, sollten Sie nur die Änderungen sehen, die Sie festschreiben möchten.

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

Installation

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

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

leymannx
quelle
1

Verwendung von Config Split (empfohlen)

Das Konfigurations-Split-Modul wurde speziell für diesen Bedarf entwickelt.

Konfigurationssplit ist in drush integriert.

Nur mit Drush

Drush soll das auch mit der --skip-modulesFlagge können.

Sie können die folgenden Zeilen in einer Drupal / Drushrc.php in der Webroot Ihres Projekts hinzufügen, um dies automatisch zu tun.

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

Siehe http://www.drush.org/de/master/config-exporting/#ignoring-development-modules

Leider gibt es einen Fehler mit dieser Funktionalität: https://github.com/drush-ops/drush/issues/1820 . Im Moment müssen Sie diese Konfigurationsdateien auch zu Ihrem .gitignore hinzufügen, damit exportierte Konfigurationsdateien nicht festgeschrieben werden. Es besteht die Gefahr, diese (fehlerhafte) Funktionalität von drush zugunsten der Konfigurationsaufteilung aufzugeben.

gagarine
quelle
2
Das Ignorieren der Konfigurationsdateien in Git funktioniert nicht genau. Die nicht exportierte Konfiguration wird gelöscht. Beispielsweise werden benutzerdefinierte Bedienfeldseiten beim Importieren der Konfiguration gelöscht.
Dobrzyns
@ user157272 auch wenn du mit drush mit ['config-import'] ['skip-modules'] importierst?
gagarine
drushrc.php kann sogar außerhalb von webroot platziert werden. Zum Beispiel eine Ebene höher, was nützlich ist, wenn Sie mit Drupal in einem Composer-Setup arbeiten: github.com/drupal-composer/drupal-project .
Leymannx
Das hat bei mir nicht funktioniert. Ich habe Module hinzugefügt, aber sie wurden trotzdem zur Konfiguration der Aktivierungs- / Deaktivierungsmodule hinzugefügt.
Jeremy John
Ich habe die Antwort mit der aktuellen Best Practice (Konfigurationsaufteilung)
aktualisiert