Ich portiere ein Modul nach Drupal 7. Das Modul verfügt über hook_update_N()
Funktionen, von denen aus aufgerufen wird hook_install()
. In einer der hook_update_N()
Funktionen werden einige Einfügeabfragen durchgeführt . Aber meine hook_update_N
Funktion läuft nicht. Gibt es eine Möglichkeit, hook_update_N
Funktionen explizit aufzurufen ?
Ich weiß, dass meine Frage fast dieselbe ist wie diese. Wie bekomme ich hook_install (), um alle hook_update_N () auszuführen? . Aber ich verstehe nicht, wie hook_update_N()
es heißt. Ich habe Updates auf meiner Drupal-Site ausgeführt, von denen ich glaube, dass sie auch Updates für benutzerdefinierte Module ausführen, aber es scheint, dass sie hook_update_N()
nicht ausgelöst werden. Weil ich eine error_log()
Funktion hinzugefügt habe , hook_update_N()
aber die Protokolldatei leer ist.
Ein weiterer Grund, warum ein Update-Hook nicht ausgeführt wird, ist eine Nichtübereinstimmung zwischen dem Namen des Update-Hooks und der Hauptversionsnummer des Moduls (siehe Info-Datei).
Beispiel: Der Update-Hook mymodule_update_7001 wird nicht ausgeführt, wenn die Modulversion 7.x.1.0 ist. In diesem Fall müssen Sie den Hook in mymodule_update_7101 umbenennen.
Weitere Informationen finden Sie in der Dokumentation zur hook_update-API
quelle
Ich hatte ein Problem, bei dem ich ein neues Modul installiert habe, aber die Installation ist fehlgeschlagen. Die schema_version blieb bei -1, was weitere Aktualisierungen für dieses Modul verhinderte. Das Setzen der Version auf 0 hat das Problem behoben.
Für Neugierige habe ich das Schema einer vorhandenen Tabelle in ein neues Modul verschoben. Der Fehler trat auf, als die vorhandene Tabelle nicht erstellt werden konnte, was ich erwartet hatte. Das Modul wurde wie erwartet aktiviert, aber ich habe nicht bemerkt, dass die schema_version nicht aktualisiert wurde.
quelle
Ein Grund, warum die Funktion hook_update_N () nichts bewirkt, ist, dass ein Update mit derselben oder einer höheren Nummer (als der Nummer, die Sie für Ihre Funktion hook_update_N () verwendet haben) bereits ausgeführt wurde.
Sie können die letzte Aktualisierungsnummer anzeigen, die für Ihr Modul ausgeführt wurde, indem Sie die Tabelle 'system' in Drupal 7 abfragen. 'Schema_version' ist eine Spalte in der Tabelle 'system', in der die Versionsnummer der letzten Aktualisierung gespeichert ist, die auf Ihr Modul angewendet wurde. Damit Ihre neue Funktion hook_update_N () funktioniert, muss die Nummer (N), die Sie darauf verwenden, höher sein als die Nummer, die derzeit in der Spalte 'schema_version' für dieses Modul gespeichert ist.
Ich habe die folgende Abfrage in der MySql-Befehlszeile verwendet (nachdem ich zum ersten Mal einen Befehl 'use' ausgegeben habe, um meinen Drupal 7-Datenbanknamen anzugeben).
mysql> wähle Name, Typ, Status, schema_version aus dem System aus, wobei type = 'module' und name = 'my_module_name';
Die Spalte 'schema_version' enthält eine Nummer. Die Nummer, die Sie für Ihre neue Update-Funktion verwenden, muss höher sein.
quelle
Ich hatte gerade dieses Problem und dachte, ich würde es dem Stapel hinzufügen, da ich es in anderen Antworten nicht sehen kann.
Mein Problem war mit Drupal 8.7 und das Problem war, dass der Modulname Großbuchstaben hatte, was dazu führte, dass keine Überprüfung auf Updates fehlschlug. Zum Beispiel :
myModule
.Der Grund dafür
drupal_get_schema_versions()
ist, dass ein statisches Array$updates
ein assoziatives Array verfügbarer Update-Schema-Versionen ist, die durch Modulnamen verschlüsselt sind. Die Modulnamen sind jedoch alle in Kleinbuchstaben. Zum Beispiel$updates['mymodule']
. Dies führt dazu, dass die Logik fehlschlägt und nichts zurückgibt, sodass Drupal denkt, dass keine Updates vorhanden sind.quelle