Ich hatte eine Situation, in der eine Tabelle durch eine Update-Funktion ( MYMODULE_update_7101
) erstellt wurde, aber auf diese Tabelle wurde in Code irgendwo in jedem Cache-Speicher und bei fast jedem Drush-Aufruf zugegriffen (im Grunde wurden die Namen der Entitätstypen für alle Menüs und was auch immer abgerufen) sonst). Laufen drush updatedb
war MYMODULE_update_7101
dritter statt erster.
Ich habe die von @macaleaa und @moshe weitzman vorgeschlagene Lösung ausprobiert:
drush php-eval 'module_load_install('MYMODULE');MYMODULE_update_7101();'
vor dem Laufen drush updatedb
, aber das hat nicht geholfen - der Drush-Lauf ist fehlgeschlagen, weil updatedb
erneut versucht wurde zu laufen MYMODULE_update_7101()
und ein Fehler aufgetreten ist, der besagt, dass die Tabelle bereits existiert hat. Grundsätzlich hat der oben genannte Code das Update ausgeführt, aber auf dem System keine Spuren hinterlassen, dass das Update ausgeführt wurde. Vermutlich update.php
muss nach jedem Update eine ganze Reihe anderer Dinge erledigt werden, um die neueste Versionsnummer für das Modul in der Datenbank usw. zu speichern.
Ich ging durch, um update.php
zu sehen, wie es tatsächlich jede Update-Funktion ausführt und was es danach tut, und suchte nach einer aufrufbaren Funktion, die die Update-Funktion aufruft und auch alle anderen Dinge erledigt. Am Ende kam ich dazu:
include_once DRUPAL_ROOT . "/includes/update.inc";
$c["results"]["#abort"] = array();
update_do_one("MYMODULE", 7101, array(), $c);
Womit ich eigentlich drush gelaufen bin:
drush eval 'include_once DRUPAL_ROOT . "/includes/update.inc"; $c["results"]["#abort"] = array(); update_do_one("MYMODULE", 7101, array(), $c);'
Das Update lief, kein Problem, aber dann tauchte MYMODULE Version 7101 immer noch in der Update-Liste auf, als ich lief updatedb
, obwohl es ohne Fehler lief und bei der Inspektion der Site alles gut aussah.
Ein bisschen hacky und 6 Jahre zu spät, aber alles gut, das gut endet?