Wie führe ich Aktualisierungen erneut aus (ändere die Modulschemaversion)?


22

Ich arbeite an einem Modul und habe einige Feldtypen im Schema geändert. Ich habe vor dem Testen kein Backup erstellt und die Datenbank durcheinander gebracht (es ist nur eine Entwickler-Site). Wie auch immer, ich habe alles neu installiert und die Schemaversion ist auf die des höchsten Updates eingestellt. Allerdings muss ich das Update tatsächlich ausführen. Eine Ansicht, die ich nicht installiert hätte, wenn ich das aktualisierte Schema im Modulcode hätte. Ich dachte, dies wäre ein guter Weg, um dieses Update zu testen.

Wie setze ich die Schemaversion meines Moduls auf eine bestimmte Version zurück? In Drupal 7 hätte ich Folgendes getan:

drush sqlq "UPDATE system SET schema_version=8102 WHERE name='flllpdf' AND type='module'"

Antworten:


47

Während der direkte Zugriff auf state funktioniert, können Sie auch einfach die API verwenden: drupal_set_installed_schema_version () . Was zumindest seit 4.7 tatsächlich unverändert existiert, ist auf der verlinkten Dokumentationsseite sichtbar. Wahrscheinlich eine der wenigen API-Funktionen, die es so lange gab;)

So setzen Sie es aus der Drush:

drush ev "drupal_set_installed_schema_version('fillpdf', 8012)"

Hinweis: In Drupal 7 müssen Sie zusätzliche hinzufügen include 'includes/install.inc';.


5
Auch schön, wenn Sie nur schnell nachsehen müssen: drush ev "echo drupal_get_installed_schema_version ('MODULE')"; api.drupal.org/api/drupal/core%21includes%21schema.inc/function/…
ben.hamelin

oder drush pm-info modulename
Beanluc

10

Drupal 8 verwendet den keyvalueDienst nun zum Speichern von Informationen zur Schemaversion. Dies ist dieselbe API, die die Status-API selbst verwendet.

Wertinformationen werden beim Speichern in der Datenbank serialisiert, sodass die Verwendung einer direkten SQL-Abfrage nicht optimal ist. Verwenden Sie stattdessen drush php-eval(oder ein Skript, das Drupal bootet, wenn Sie nicht über Drush verfügen), um Folgendes auszuführen:

<?php
  \Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102);
?>

Ändern fillpdfund 8102zu Ihrem Modulnamen und die gewünschte Schemaversion ist.

Die Drush-Form dieses Befehls lautet:

drush ev "\Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102)";


0

Zum SETZEN und ERHALTEN von Modulupdates per Code (ohne Drush). Unten ist der Code

GET  = drupal_get_installed_schema_version('moduleName');

SET = drupal_set_installed_schema_version("moduleName", "8000");

0

Kann auch direkt in der Datenbank aktualisiert werden. Wenn Sie etwas wie Sequel Pro (Mac) oder ein anderes Datenbank-UI-Tool von Windows / Linux verwenden, ist das ganz einfach. Wohl nicht die beste Idee, und ich würde nicht empfehlen, dies gegen eine Datenbank auf Produktionsebene zu tun, aber es wird die Arbeit erledigen!

Tabelle = Schlüsselwert

collection = system.schema
name = fillpdf (ihr_modul)
value = update auf i: 8102;

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.