Was ist das Protokoll zum Hinzufügen einer neuen Modulabhängigkeit zu einem Modul, für das nur eine Entwicklerversion verfügbar war?

7

Ich habe vor einiger Zeit ein Modul erstellt und es hat erst seit ungefähr einem Monat eine Version 7.x-1.x-dev auf Drupal.org. Es gibt bereits eine Reihe von gemeldeten Downloads und Installationen für dieses Modul, daher möchte ich sicherstellen, dass die Handvoll Benutzer, die dieses Modul bereits verwenden, in der nächsten Entwicklerversion, die ich erstellen muss, noch berücksichtigt werden. Die neue Version wird eine neue Modulabhängigkeit haben, die von einem anderen Projekt stammt (dh nicht als ein Submodul von mir enthalten ist). Während ich normalerweise eine 2.x-Version erstellen würde, wenn das Modul eine stabile Version hätte, war es nur in dev. Füge ich einfach die neue Abhängigkeit im 1.x-dev hinzu oder erstelle ich einen 2.x-dev?

Nigel Waters
quelle
Erstellen Sie ein Dokument für das Upgrade
Monymirza
Ich habe bereits vor, das Änderungsprotokoll zu verwenden und das Dokument zu aktualisieren, um dies zu notieren. Dies ist nicht das Problem. Da man hoffen würde, dass Benutzer diese Informationen vor dem Aktualisieren lesen würden, tun dies viele nicht. Das Modul befindet sich in dev, daher sollten die Leute damit rechnen, dass es ihre Site beschädigt, aber ich möchte sicherstellen, dass es ein Protokoll dafür gibt, bevor ich fortfahre.
Nigel Waters

Antworten:

3

Für einen solchen Fall gibt es kein sanktioniertes Protokoll. Ich denke nur daran, die Auswirkungen zu minimieren.

Bedenken Sie, dass Benutzer selbst dann, wenn Sie einen neuen Zweig erstellen, möglicherweise aktualisieren und keine neue Abhängigkeit erkennen und Ihr Modul aufgrund nicht erfüllter Abhängigkeiten möglicherweise stillschweigend deaktiviert wird. Dies geschah mit der Aktualisierung der Ansichten von 6.x-2.x auf 6.x-3.x, bei der eine Abhängigkeit von ctools hinzugefügt wurde. In diesem Fall war die Auswirkung gering, da normalerweise Werkzeuge vorhanden sind.

In der Dokumentation empfehle ich zusätzlich zum Änderungsprotokoll oder Upgrade-Dokument auf der Projektseite, es den Versionshinweisen hinzuzufügen. Da können sie beim Aktualisieren mit Drush leicht gelesen werden.

Wenn die von Ihnen eingeführte Abhängigkeit ein beliebtes Modul ist, können Sie die Auswirkungen verringern, indem Sie die neue Abhängigkeit in hook_update_N aktivieren oder einen Fehler auslösen, falls dieser nicht verfügbar ist. Hier ist ein ungetesteter Code:

<?php
function MODULENAME_update_7001() {
  $enabled = module_enable(array('foo', 'bar'));
  if (!$enabled) {
    throw new DrupalUpdateException('foo required.');
  }
}
jonhattan
quelle
0

Abgesehen von dem, was @jonhattan erwähnt hat, würde ich eine weitere Methode vorschlagen, um dies zu tun. Fügen Sie diese Abhängigkeit in die Datei mymodule.info ein. Nehmen wir an, Sie möchten eine neue Abhängigkeit zu Link, E-Mail und Adressfeld hinzufügen.

dependencies[] = link
dependencies[] = email
dependencies[] = addressfield

Versuchen Sie nun in hook_requirments, die Module automatisch zu aktivieren, falls vorhanden. Bitte beachten Sie, dass, da wir Abhängigkeiten in der Info-Datei hinzugefügt haben, diese aktiviert werden, wenn sie zum ersten Mal installiert werden. Aber sonst würden sie "verschlossen" erscheinen. In diesem Fall müssten wir sie automatisch aktivieren. Nachdem @jonhattan geantwortet hat, können Sie versuchen, dies in hook_update_N zu tun und eine Ausnahme auszulösen, wenn dies fehlschlägt.

Das Problem mit der obigen Methode ist jedoch die Benutzererfahrung. Sie können in der Ausnahmemeldung keine "Links" ausgeben. Ein weiterer Grund ist, dass dies leicht vermieden werden kann, indem der Benutzer unmittelbar vor dem Versuch einer Aktualisierung informiert wird. Für diesen Fall haben wir hook_requirements.

Ich werde ein Beispiel zur Verwendung von hook_requirements für den von mir erwähnten Beispielfall bereitstellen.

/**
 * Implements hook_requirements.
 */
function mymodule_requirements($phase) {
  $requirements = array();
  if ($phase == 'update') {
    $enabled = module_enable(array('link', 'email', 'addressfield'));
    if( !$enabled ) {
      $t = get_t();
      $requirements['mymodule_migrate'] = array(
        'title' => $t('Mymodule Migrate Issues'),
        'value' => $t('One or more of the required modules cannot be enabled.
          If you download the modules from Drupal.org those would be enabled automatically when update script is run.
          So Please make sure following modules are present: !link, !email & !addressfield',
          array(
            '!link' => l('link', 'https://drupal.org/project/link'),
            '!email' => l('email', 'https://drupal.org/project/email'),
            '!addressfield' => l('addressfield', 'https://drupal.org/project/addressfield'),
          )
        ),
        'severity' => REQUIREMENT_ERROR,
      );
    }
  }
  return $requirements;
}

Jetzt ist es auch möglich, jedes Modul einzeln zu aktivieren und die Nachricht richtig zu gestalten, sodass nur die fehlenden Module in der Nachricht angezeigt werden.

D34dman
quelle