it-swarm.com.de

Wie erstelle ich eine Registrierungstabelle neu?

Ich habe die Tabelle registry aufgrund der anderen Probleme abgeschnitten, aber jetzt habe ich Probleme, die Tabelle registry basierend auf den in der Datenbank aufgelisteten Dateien neu zu erstellen.

Ich rufe registry_update(), _registry_update() oder registry_rebuild() auf, um es zu tun:

drush eval "registry_rebuild();"

Aber dann habe ich folgenden Fehler, der auftritt:

Schwerwiegender Fehler: Die Klasse 'SelectQueryExtender' wurde in include/pager.inc in Zeile 15 nicht gefunden

Standardmäßig (bei der Installation des Moduls system) ist die Tabelle registry leer. Wie füllt Drupal diese Tabelle mit den richtigen Standarddaten?

9
kenorb

Der absolut einfachste Weg, dies zu tun, besteht darin, ein beliebiges Modul zu aktivieren, da dies für Sie erledigt wird. Wenn Sie die Registrierung neu erstellen müssen, ist die Benutzeroberfläche im Allgemeinen möglicherweise nicht verfügbar, aber drush en [modulename] könnte alles sein, was Sie brauchen.

Wenn das nicht ausreicht, macht Registry Rebuild das Wiederherstellen der Registry ganz einfach. Der einfachste Weg, dies zu tun, besteht darin, es als Drush-Erweiterung zu installieren.

Installieren Sie die Erweiterung und führen Sie drush rr.

Die Modulseite enthält detaillierte Installationsanweisungen und zeigt auch, wie Sie sie bei Bedarf ohne Drush ausführen können.

15
Letharion

Dies kann entweder durch Neuinstallation von Drupal oder durch Kopieren der Tabelle aus einer idealerweise neuen Installation von Drupal in Ihre fehlerhafte Instanz) behoben werden.

Oder Sie können die folgende Problemumgehung ausprobieren (nur, wenn Ihre Drupal -Instanz bereits defekt ist):

  1. Sichern Sie zuerst die alte Registrierungstabelle (nur für den Fall):

    drush sqlq "CREATE TABLE registry_bak LIKE registry; INSERT INTO registry_bak SELECT * FROM registry;"
    drush sqlq "CREATE TABLE system_bak LIKE system; INSERT INTO system_bak SELECT * FROM system;"
    
  2. Löschen Sie den Cache und die Registrierungstabelle bootstrap).

    drush sqlq "TRUNCATE cache_bootstrap; TRUNCATE registry"
    
  3. Fügen Sie die Basisdaten in die Registrierungstabelle ein:

    drush sqlq 'INSERT INTO registry (name, type, filename) VALUES ("SelectQueryExtender", "class", "includes/database/select.inc"), ("DrupalDefaultEntityController", "class", "includes/entity.inc");'
    drush eval "registry_update();"
    
  4. Löschen Sie die Caches:

    drush -y cc all
    
  5. Wenn das Löschen von Caches in 4. aufgrund einiger anderer fehlender Klassen fehlgeschlagen ist, können Sie entweder:

    a) Fügen Sie die fehlenden Klassen manuell hinzu, zum Beispiel:

    $ drush -y cc all
    Fatal error: Class 'Entity' not found in profile2.module on line 593
    $ grep -Rwl "^class Entity" .
    ./sites/all/modules/entity/includes/entity.inc
    $ drush sqlq 'INSERT INTO registry (name, type, filename) VALUES ("Entity", "class", "sites/all/modules/entity/includes/entity.inc");'
    $ drush -y cc all # testing...
    # If Fatal error:, repeat 5a. again.
    

    oder:

    b) Versuchen Sie, diese fehlerhaften Contrib-Module (z. B. Profil2, Regeln) zu deaktivieren, indem Sie:

    drush sqlq 'UPDATE system SET status = 0 WHERE name = "failing_module"'
    

    und wiederholen Sie die Schritte ab 4.

  6. Wenn etwas mehr kaputt ist als es war, können Sie Ihre Tabellen auf den ursprünglichen Punkt zurücksetzen (der in Schritt 1 ausgeführt wurde), indem Sie:

    drush sqlq "TRUNCATE registry; INSERT INTO registry SELECT * FROM registry_bak;"
    drush sqlq "TRUNCATE system; INSERT INTO system SELECT * FROM system_bak;"
    

    und versuche es erneut.

Siehe auch: Verschieben installierter Module von/sites/all/modules/* nach/sites/all/contrib/modules/*


Die Neuerstellung der Tabelle registry kann auch mit dem folgenden Skript erreicht werden, das in Drupal webroot) ausgeführt wird:

grep -ERo "^(\s+)?(abstract )?class (\S+)" . | tr ':' ' ' | sed "s/abstract //g" | awk '{print "INSERT INTO registry (filename, type, name) VALUES (\x27"$1"\x27,\x27"$2"\x27,\x27"$3"\x27);"}' | $(drush sql-connect) -f

Dank der Hilfe von Mike bei Regex.

9
kenorb