So verhindern Sie, dass das Devel-Modul in Produktionsumgebungen installiert wird


26

Wie kann ich mit dem neuen Drupal 8-Konfigurationsmanager verhindern, dass das Devel-Modul in bestimmten Umgebungen installiert wird? Soweit ich weiß, wird die Installation auf meinem lokalen Computer automatisch aktiviert, wenn ich die Konfiguration das nächste Mal exportiere und in meine anderen Umgebungen (dev, test, prod) verschiebe.


Ist die Verwendung drushakzeptabel? Ich habe neulich davon erfahren drush config-export --skip-modules=devel. Es könnte etwas Ähnliches ohne Drush geben, aber ich weiß es nicht.
Mradcliffe

Müsste ich das also jedes Mal tun, wenn ich die Konfiguration exportiere? Es muss einen besseren Weg geben: |
Cambraca

Vielleicht kannst du ein paar Konfigurationsdateien zu deinem .gitignore hinzufügen.
Digitaldonkey


2
Ich denke, diese Frage ist im Nachhinein zu weit gefasst. Es gibt wahrscheinlich viele gute Antworten, da dies vom Erstellungs- und Entwicklungsprozess der Site abhängt.
Mradcliffe

Antworten:


18

Methode: Drush

  • Drush kann die aktivierten Zustände von Erweiterungen beim Synchronisieren der Konfiguration ignorieren.

    drush cex --skip-modules=devel

    drush cim --skip-modules=devel

  • Mit Drush CMI-Tools können Sie mit einer Liste zu ignorierender Konfigurationen arbeiten.

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

    drush cimy --delete-list=/path/to/config-ignore.yml

Methode: Module

  • Sie können das Configuration Split- Modul verwenden, mit dem Sie:

    1. Teilen Sie die Konfiguration in einen bestimmten Ordner auf
    2. Blacklist-Konfiguration
    3. Ignorieren Sie einen Konfigurationssatz
    4. Von Konfigurationsentitäten konfiguriert
  • Konfiguration Nur-Lese-Modus- Modul

    Dieses Modul ermöglicht das Sperren von Konfigurationsänderungen, die über die Drupal-Administrationsoberfläche vorgenommen wurden. Dies kann in Szenarien nützlich sein, in denen beispielsweise Konfigurationsänderungen nicht in der Produktionsumgebung, sondern nur in Staging- oder lokalen Umgebungen vorgenommen werden sollten.

    $settings['config_readonly'] = TRUE;

  • Ein weiteres Modul ist die Umgebungskonfiguration , mit der Sie die Konfiguration für jede Umgebung außer Kraft setzen können.


2
Ich mag es wirklich nicht, alle Bibliotheksabhängigkeiten für das Entwicklungsmodul auf meinen Produktionsservern zu haben, also füge ich sie dem Composer mit hinzu composer require --dev drupal/devel. Ein zusätzlicher Bonus ist, dass die Composer-Installation schneller ist und die Bereitstellung von Produkten schneller erfolgt.
Duncanmoo,


6

Update : Die unten beschriebene Funktion wurde kürzlich unter https://www.drupal.org/project/config_split/issues/2926505 entfernt


Wenn Sie in Ihrem Bereitstellungsprozess Drush verwenden, können Sie Folgendes tun:

Erstellen Sie eine drushrc.phpDatei in demselben Verzeichnis wie Ihre settings.php(zum Beispiel:) docroot/sites/defaultund geben Sie Folgendes ein:

$drush_ignore_modules = array(
  'devel',
  'webprofiler',
  'devel_generate',
  'kint',
  'yaml_editor',
);

$command_specific['config-export']['skip-modules'] = $drush_ignore_modules;
$command_specific['config-import']['skip-modules'] = $drush_ignore_modules;

Dies bedeutet, dass Sie die drush cex/ drush cim-Befehle manipulieren können, um Module während ihres Vorgangs zu überspringen.

Weitere Informationen zur Verwendung des Konfigurationsmodulfilters in Drush 8 finden Sie hier .


5

drush cex --skip-moduleswurde zugunsten von config_split entfernt, wie in dieser Ausgabe erläutert , daher haben die hier auf drush basierenden Lösungen für mich nicht funktioniert.

Hier ist die Lösung basierend auf der Duncanmoo-Lösung mit dem config_exclude- Modul

1. Installieren Sie config_exclude mit Composer require --dev und konfigurieren Sie es

$ composer require --dev drupal/config_exclude
$ drush en config_exclude -y
$ nano sites/default/setting.php

Erlaube settings.php in deiner lokalen Entwicklungsumgebung zu verwenden

if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
  include $app_root . '/' . $site_path . '/settings.local.php';
}

Fügen Sie config_exclude-Einstellungen in die lokale Datei ein

$ nano sites/default/setting.local.php

Hier sind einige Beispieleinstellungen

$settings['config_exclude_modules'] = [
    'devel', 
    'config_exclude',
    'config_filter',
    ...
    'stage_file_proxy',
];

HINWEIS 1: config_filter ist eine config_exclude-Abhängigkeit. Wenn Sie es also nicht benötigen, können Sie es oben ausschließen

Hinweis 2: Die settings.local.phpist nicht erforderlich. Es hängt davon ab, ob Ihr VCS dies steuert oder nicht.

2. Der Komponist benötigt --dev

Wenn Sie ein Modul aktivieren, das nur für die Entwicklung vorgesehen ist, verwenden Sie das Flag --dev:

$ composer require --dev drupal/devel

Dies führt dazu, dass diese Abhängigkeiten in die Datei composer.json unter require-dev eingefügt werden:

...
    "require-dev": {
        "drupal/twig_xdebug": "^1.0",
        "drupal/devel": "^1.0@RC"
    }
}

Wenn Sie die Site also OHNE die von Ihnen verwendeten Dev-Module installieren, gehen Sie wie folgt vor:

$ composer install --no-dev

HINWEIS: In Ihrer Staging- und Produktivumgebung sollten Sie immer --no-dev ausführen

3. Verwenden Sie Drush Cex wie gewohnt

$ drush cex 

exportiert keine der ausgeschlossenen Moduleinstellungen

ANMERKUNG: Ich habe bemerkt, dass die core.extension- Einstellungen nach dem Ausführen des obigen Befehls geändert wurden, aber die entsprechende .yml-Datei nie auf die Festplatte geschrieben wurde (auch nicht nach der Bestätigung will be deleted and replaced with the active config) Interna des Moduls config_exclude


Ich hatte sehr ähnliche Erfahrungen wie @GiorgosK, nachdem ich oben Vorschläge gemacht hatte. Diese Lösung hat für mich perfekt funktioniert und enthält auch gut durchdachte Ratschläge. Ich habe auch festgestellt, dass core.extension falsch negativ ist, aber es hat in der Tat NICHT den Status für git geändert, so dass alles in Ordnung ist. Vielen Dank
vrwired

2

Für Drupal 8.3.x gibt es ein interessantes Problem: Entwicklungsmodule können den Konfigurations-Export deaktivieren . Allgemein besteht Einigkeit darüber, dass Configuration Split derzeit die beste Lösung ist.

Kommentar von swentel :

Ich wollte nur kurz dokumentieren, wie config_split funktioniert: Die Entität config split config definiert, was auf der schwarzen Liste steht, und ermöglicht es Ihnen, Module und / oder Konfigurationsobjekte auf die schwarze Liste zu setzen. Das kanonische Beispiel, devel zu sein, hat bereits einen interessanten Anwendungsfall: Es wird mit system.menu.devel geliefert, wodurch die Menükonfigurationsdatei nicht entfernt wird, wenn Sie devel auf die schwarze Liste setzen, da keine Abhängigkeit besteht. Obwohl dies kein großes Problem ist, können Sie es mit der Konfigurationsaufteilung auch einzeln auswählen, um es für die Umgebung zu entfernen.

Kommentar von geerlingguy :

Ich habe ein paar verschiedene Methoden zum Verwalten der umgebungsspezifischen Konfiguration ausprobiert, und config_split scheint die bisher beste Lösung für die richtige Benutzerfreundlichkeit im Vergleich zum zusätzlichen Overhead-Ausgleich zu sein. Es ist einfach und leicht, ermöglicht mir jedoch, bestimmte Konfigurationen nur in bestimmten Umgebungen zu markieren (und weiterhin zu verwenden).


2

Konfigurations-Split könnte für einige eine praktikable Lösung sein.

Das Drupal 8-Konfigurationsmanagement funktioniert am besten, wenn Sie die gesamte Site-Konfiguration importieren und exportieren. Manchmal möchten Entwickler jedoch die Robustheit von CM ablehnen und auf ihrem Entwicklungscomputer eine Vielzahl von Konfigurationen aktiv haben und nur eine Teilmenge bereitstellen. Das kanonische Beispiel hierfür ist, dass das Entwicklungsmodul aktiviert ist oder einige Blockplatzierungen oder Ansichten in der Entwicklungsumgebung vorhanden sind und diese dann nicht in die zu implementierende Konfigurationsgruppe exportiert werden, die Entwicklungskonfiguration jedoch weiterhin mit Kollegen geteilt werden kann.

https://www.drupal.org/project/config_split


+1 für Konfigurationssplit, ich benutze das immer, um Devel und andere Module wie Field UI und Views UI in prod zu deaktivieren. Siehe Deaktivieren von Modulen mithilfe von Konfigurationssplit .
Leymannx

2

Es gibt eine gute Möglichkeit, dies zu tun, bei der Sie Ihre Entwicklungsmodule der Einfachheit halber in Composer übergeben und die Konfiguration dieser Module nicht zu Ihrem Konfigurations-Export hinzugefügt werden (es gibt zwei Teile):

1. Composer erfordert --dev Wenn Sie ein Modul aktivieren, das nur für die Entwicklung vorgesehen ist, verwenden Sie das Flag --dev:

$ composer require --dev drupal/devel

Dies führt dazu, dass diese Abhängigkeiten in die Datei composer.json unter require-dev eingefügt werden:

...
    "require-dev": {
        "drupal/twig_xdebug": "^1.0",
        "drupal/devel": "^1.0@RC"
    }
}

Wenn Sie also die Site OHNE Ihre Dev-Module installieren, sagen Sie:

$ composer install --no-dev

NB: In Ihrer Staging- und Produktivumgebung sollten Sie immer --no-dev ausführen

2. Verwenden Sie das Modul config_split

Mit dem Konfigurations-Split-Modul können Sie Gruppierungen für den Konfigurationsexport erstellen, die in einer Umgebung aktiviert oder deaktiviert werden können.

Ich habe tatsächlich 3 Splits:

  1. Hauptsite-Konfiguration (überall aktiviert; Entwicklung und Staging und Produktion)
  2. Staging-Konfiguration (aktiviert in dev und Staging) - enthält das E-Mail-Umleitungsmodul
  3. Entwicklerkonfiguration - Enthält devel, kint ... aber keine Umleitung von E-Mails, da die Staging-Konfiguration in dev aktiviert ist.

1
Sie sollten auf diese Weise wirklich keine Dev-Abhängigkeiten verwenden. Sie sind eher für Tools wie Code Sniffer gedacht, die Sie in der Produktion nicht ausführen müssten. Wenn sie aktiviert sind und Drupal erwartet, dass das Modul installiert wird und der Code nicht vorhanden ist, kann dies zur Instabilität der Site führen. Drupal / Composer versucht möglicherweise weiterhin, eine Datei zu laden, die sich nicht im Dateisystem befindet, wenn es sich um eine Dev-Abhängigkeit handelt.
Frank Robert Anderson

@FrankRobertAnderson schlagen Sie keine bessere Lösung vor? Ich möchte keine Entwicklungsmodule oder abhängigen Bibliotheken auf meinem Produktionsserver haben. Was schlagen Sie vor?
Duncanmoo

Drupal bietet hierfür keine wirklich gute Option. Ihr Plan ist nicht schrecklich, aber es wird zu Problemen führen, wenn Sie nicht vorsichtig sind. Das Problem, das ich mit Ihrem Plan habe, ist, dass config_split der Pin wird, den Ihre gesamte Site dann verwendet. Ich würde Ihre Stimme abgeben, wenn nicht für die Dev-Dependency-Sache, die im OP nicht einmal eine Frage war.
Frank Robert Anderson

1

Ich habe ein kleines Skript erstellt, um alles auf einmal zu erledigen.

#!/bin/bash

drush pm-uninstall devel -y
drush pm-uninstall field_ui -y
drush pm-uninstall field_name_prefix_remove -y

drush config-export

drush en devel -y
drush en field_ui -y
drush en field_name_prefix_remove -y

1

Sie können auch das Modul Config Ignore sehen .

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

Nehmen wir an, Sie möchten, dass die system.site-Konfiguration (die den Namen, den Slogan, die E-Mail-Adresse usw. dieser Site enthält) auf Ihrer Live-Site unberührt bleibt, unabhängig von der Konfiguration, die im Exportordner angegeben ist.

Oder haben Sie es satt, die devel.settings jedes Mal zu ändern, wenn Sie die Konfiguration importieren?


Das Config Ignore-Modul ist in diesem Fall nicht geeignet. Auf der Modulseite
Bmunslow

1

Sie können hierfür ein Modul zum Überschreiben der Bereitstellung verwenden. Lesen Sie den folgenden Link für eine detaillierte Beschreibung:

http://dcycleproject.org/blog/46/continuous-deployment-drupal-style

Der beste Weg, dies zu tun, ist jedoch, das Modul lokal zu deaktivieren und dann die Konfiguration zu exportieren.

Drupal bietet eine Möglichkeit, die Konfigurationseinstellungen in zu überschreiben settings.php , sie sind jedoch nicht zum Deaktivieren / Aktivieren von Modulen gültig.

Von default.settings.php:

/**
 * Configuration overrides.
 *  * To globally override specific configuration values for this site,
 * set them here. 
 * 
 *
 * blah..blah...blah
 *
 *  
 * There are particular configuration values that are risky to override. For
 * example, overriding the list of installed modules in 'core.extension' is not
 * supported as module install or uninstall has not occurred. Other examples
 * include field storage configuration, because it has effects on database
 * structure, and 'core.menu.static_menu_link_overrides' since this is cached in
 * a way that is not config override aware. Also, note that changing
 * configuration values in settings.php will not fire any of the configuration
 * change events.
 */
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.