Antworten:
Die system
Daten der Drupal 7- Tabelle werden jetzt in der config
Tabelle in Drupal 8 für den core.extension
Parameter gespeichert .
Lösung 1: Konfiguration aktualisieren
Sie können den folgenden Code drush eval
ausführen, indem Sie die Bereitstellung des Devel-Moduls für verwenden oder verwenden Execute PHP Code
.
// Read the configuration.
$module_data = \Drupal::config('core.extension')->get('module');
// Unset the modules you do not need.
unset($module_data['MODULE_NAME']);
// Write the configuration.
\Drupal::configFactory()->getEditable('core.extension')->set('module', $module_data)->save();
Sie können dies alles in einem schnellen Einzeiler mit tun drush
.
drush eval "\$module_data = \Drupal::config('core.extension')->get('module'); unset(\$module_data['MODULE_NAME']); \Drupal::configFactory()->getEditable('core.extension')->set('module', \$module_data)->save();"
Lösung 2: Bearbeiten Sie die Konfigurationstabelle, wenn Sie PHP nicht ausführen können
Wenn die Site aufgrund des problematischen Moduls beschädigt ist und Sie nicht einmal PHP-Code ausführen können, können Sie die config
Tabelle möglicherweise direkt bearbeiten .
In der Zeile in der config
Tabelle wo name = "core.extension"
und bearbeiten Sie die BLOB-Spalte data
. Das data
ist ein serialisiertes PHP-Array, bei dem Sie das Modul, das Sie entfernen möchten, aus dem module
Schlüssel der Konfiguration entfernen müssen .
Lösung 3: Schnelle und schmutzige Lösung
cache_config
Diese Lösung kann jedoch zu Meldungen führen, die besagen, dass das Modul nicht im Dateisystem vorhanden ist, was bedeutet, dass etwas nicht stimmt. Aber zumindest wird das defekte Modul deaktiviert und Sie können in den meisten Fällen auf Ihre Site zugreifen.
Cache leeren
Manchmal müssen Sie möglicherweise den Cache leeren, nachdem Sie die obigen Schritte ausgeführt haben. Lesen Sie diese praktische Dokumentation zum Löschen des Caches .
drush eval
. Ein Beispiel für einen drush eval "\$module_data = \Drupal::config('core.extension')->get('module'); unset(\$module_data['example_module']); \Drupal::configFactory()->getEditable('core.extension')->set('module', \$module_data)->save();
Einzeiler ist: Beachten Sie das mit einem Escapezeichen versehene Dollarzeichen, damit die Befehlszeile nicht $module
als Bash-Variable falsch interpretiert wird.
Mach das:
rm -rf modules/your_stubborn_module
rm -rf sites/default/files/php
drush cache-rebuild
zu
config
Tabelle where manuell name = 'core.extension'
und entfernen Sie das Modul aus dem Daten-Blob, bei dem es sich um ein serialisiertes Array handelt.(...s:6:"module";a:HERE;{...)
cache_config
Kürzen Sie die Tabelle von phpmyadmin oder über die Befehlszeile.i:0;s:8:"name of the module";
s:8:"name of the module";i:0;
. @Valli bedeutete, dass das Array, das die Anzahl der Module beschreibt, in der Anzahl um die Anzahl der entfernten Module verringert werden sollte. Der Anfang des Blobs in meinem Setup ist a:4:{s:6:"module";a:59:{
, das ist ein Array von 59 Modulen. Wenn Sie zwei löschen, ändern Sie diesen Array-Wert auf 57.
Erwägen Sie die Verwendung von Drush. Drupal 8 definiert immer noch, was "Deaktivieren von Modulen" sein soll. Es gibt eine laufende Diskussion, ob es diese Option geben sollte oder ob sie entfernt werden sollte.
Wenn Sie etwas in Bezug auf die Drupal-Konfiguration aktualisieren müssen, verwenden Sie in diesem Fall core.extension
Drush:
[Drush 8.x in diesem Beispiel]
drush cedit core.extension
Dafür gibt es ein Modul. Dieses Modul wurde im August 2013 auf drupal.org veröffentlicht . Für den Fall, dass jemand braucht.
Wie auf der Seite dieses Moduls angegeben,
Drupal 8 hat die Fähigkeit zum Deaktivieren von Modulen aus vielen Gründen entfernt. Siehe # 1199946: Deaktivierte Module sind irreparabel defekt, sodass die "Deaktivierungs" -Funktionalität entfernt werden muss und viele andere Probleme in der Warteschlange verschiedener Core- und Contributed-Module auftreten.
Dieses Modul bietet die Möglichkeit, Module über die Benutzeroberfläche oder mit Drush (vorübergehend) zu deaktivieren. Beachten Sie, dass es nach dem Deaktivieren eines Moduls keine Garantie für Ihren Inhalt, Ihre Konfiguration oder sogar Ihre Site gibt.
Auf diese Weise habe ich ein Modul mit dem Namen "better_messages" manuell aus meiner Drupal 8-Instanz entfernt. Sobald ich das "better_messages" -Modul installiert habe, ist die Site ausgefallen. Es gab also keine Möglichkeit, das Modul von der Benutzeroberfläche zu deinstallieren. Ich habe Drush nicht installiert. Ich habe viele Einstellungen in Foren vorgenommen, aber so funktionierte es schließlich für mich.
1 Benennen Sie das Modul in old_better_messages im Ordner modules um.
Über die URL lief http: // IP: port / ordnername / rebuild.php . Dadurch wurde sichergestellt, dass die Site wieder verfügbar ist, jedoch nur im schreibgeschützten Modus. Ich konnte die Admin-Aktivitäten nicht ausführen oder Artikel nicht bearbeiten.
Mit dem folgenden Befehl wird der Eintrag aus der Datenbank gelöscht
DELETE FROM key_value WHERE collection = 'system.schema' AND name = 'better_messages';
In meinem Fall gab es keinen Eintrag in der Datenbank. Ich denke, es könnte wegen der verschiedenen Stunts, die ich früher gemacht habe, gelöscht worden sein.
Dies löste das Problem. Dies basiert auf meiner Interpretation von https://www.drupal.org/node/2487215
Jigarius 'Antwort oben hat irgendwie funktioniert ...
Ich musste: // die Konfiguration lesen.
$module_data = \Drupal::config('core.extension')->get()['module'];
Welches sollte das gleiche tun. Ich bin mir nicht sicher, warum es nicht so funktioniert hat, wie Jigarius es geschrieben hat ...