Wie kann ich ein Modul sicher in einen anderen Ordner verschieben?

7

Ich habe ein Modul über die Drupal-Konsole erstellt. Leider wurde es nicht in einem eigenen Ordner abgelegt, sondern direkt in /modules/custom. Bevor ich bemerkte, wohin es gegangen war, aktivierte ich das Modul.

In Drupal 6/7 war dies einfach zu beheben - ich konnte buchstäblich nur die Dateien in den richtigen Pfad einfügen, den Cache leeren (vielleicht die Registrierung neu erstellen, es war keine exakte Wissenschaft) und alles war gut.

Das gleiche gilt nicht für Drupal 8; Ich habe die Dateien in einen Unterordner verschoben, den Cache neu erstellt und alle Anfragen haben mir mitgeteilt, dass Drupal keine erforderliche Datei enthält. Die bestimmte Datei ist eine Blockklasse, und der Pfad, den Drupal zu finden versucht, befindet sich dort, wo sie sich früher befand , und nicht dort, wo ich sie verschoben habe.

Das bisschen Code-Einspruch ist in Symfony's ApcClassLoader, also muss ich wohl etwas löschen, das etwas über Drupals Kopf liegt, um diese Pfadreferenz zu aktualisieren.

Wie kann ich das machen?

Das Deinstallieren und erneute Installieren des Moduls funktioniert, aber sobald wichtige Daten gespeichert sind, ist dies keine Option mehr.

Ich habe mich geirrt, Deinstallation und Neuinstallation sind keine praktikable Option. Nach der Deinstallation und Neuinstallation kann Drupal die vom Modul definierten benutzerdefinierten Blöcke nicht mehr abrufen. Ich vermute, dass die Referenz an einer Stelle zwischengespeichert wird, die bei der Deinstallation des Moduls nicht gelöscht wird. Ich muss nur herausfinden, wo das ist und wie ich es klären kann ...

Clive
quelle
Wenn Sie also first.module und second.module mit Drupal Console erstellen, finden Sie beide Dateien in / modules / custom? Ich werde dann niemals ein Modul damit erstellen.
Kiamlaluno
Ich hatte eine alte Version @kiamlaluno, die jetzt aktualisiert wurde, und dieses Problem ist nicht vorhanden. Das Problem in der Frage ist jedoch definitiv, dass es tatsächlich schlimmer wird. Ich habe gerade ein brandneues Modul mit einem brandneuen Block hinzugefügt, und Drupal wird diesen Block jetzt nicht für die Administrationsseite übernehmen. Etwas ist in seiner Konfiguration wirklich durcheinander, aber ich weiß nicht, wo ich suchen soll: /
Clive
Ist ApcClassLoader::findFile()immer den falschen Weg aus apc_fetch()oder ist der dekorierte Class Loader den falschen Weg der Rückkehr?
Gapple

Antworten:

11

Starten Sie einfach Apache neu. Der APC-Cache wird dann neu erstellt.

Sie können auch versuchen, rebild.php zu drücken oder drush cr auszuführen. Alle versuchen explizit, den APC-Cache zu leeren.

Berdir
quelle
Ja, ich habe die gleichen Dinge getan (nginx + fpm, aber beide mehrmals neu gestartet), plus apc_flush_cache direkt ausgeführt und sogar zwischen php5 und 7 gewechselt, also völlig unterschiedliche Geschäfte. Ich habe immer noch das Problem gesehen, aber ich vermute, es liegt etwas an meinem Setup, der Logik sagt, eine dieser Methoden würde es beheben. wird morgen genauer hinsehen
Clive
Die Nacht scheint es behoben zu haben, also werde ich vorerst einen Stift
Clive
Rebuild.php (im Browser öffnen) hat geholfen, Neustart von Apache und Löschen des Cache haben nicht geholfen.
Drupalfan
Ich habe den Cache geleert, rebild.php ausgeführt und Apache neu gestartet. Funktioniert immer noch nicht und bekommt den gleichen Fehler. Blöcke, die auf den alten Modulpfad verweisen.
ARUN
0

Eine andere Lösung finden Sie in Ihrer settings.php:

 /**
 * Class Loader.
 *
 * If the APC extension is detected, the Symfony APC class loader is used for
 * performance reasons. Detection can be prevented by setting
 * class_loader_auto_detect to false, as in the example below.
 */
$settings['class_loader_auto_detect'] = FALSE;
rpayanm
quelle
-1

Sie sollten den Drupal-Cache leeren. So geht das mit Drush:

drush cr
Somerussian
quelle
Wir sprechen hier über Drupal 8, dies funktioniert oben für Drupal 7.
Marko Blazekovic
Danke Marko, habe meine Antwort für die Drupal 8-Lösung aktualisiert.
Somerussian