So handhaben Sie das Aktivieren neuer Module mit Drush über das Makefile

8

Bei der Arbeit arbeiten wir daran, unsere neuen Standorte in Git einzurichten und lokale Entwicklungen durchzuführen. Bisher habe ich eine Drush-Make-Datei zusammen mit einem Installationsprofil erstellt und dieses Skript über Puppet erstellt, sodass ein Benutzer, der einen neuen Klon eines Repositorys erstellt, alle Pakete herunterlädt und eine grundlegende Site-Installation ausführt. Das funktioniert OK.

Meine Frage ist nun, wann ich ein neues Modul für eine Site verwenden muss. Zum Beispiel erstellen wir ein neues Modul für die Site. Ich möchte, dass die anderen Entwickler von Git ziehen und das neue Modul automatisch installieren. Wenn Sie es zur Drush-Make-Datei hinzufügen, wird es nur heruntergeladen, und wenn Sie 'drush si' ausführen, wird die Site neu installiert und alle Daten werden gelöscht.

Was ist der beste Weg, um dies zu erreichen?

Bearbeiten

Ich habe das Gefühl, dass ich das nicht richtig erklärt habe. Ich suche nach einer Möglichkeit, Module basierend auf den Makefile-Einträgen in drush automatisch zu aktivieren. Die Idee ist, dass der Benutzer ein Projekt auscheckt und dann die Puppe 'drush make' und 'drush si' ausführen lässt, wenn keine settings.php-Datei vorhanden ist. Was ich herausfinden muss, ist, wann der Benutzer das nächste Mal einen Pull ausführt und wir ein neues Modul hinzugefügt haben, wie dies automatisch durch ein Skript aktiviert wird. Wenn ich muss, schreibe ich etwas, um das Makefile zu analysieren und 'drush en' manuell auszuführen, aber ich möchte etwas finden, das dafür vorgefertigt ist.

Drachenmantel
quelle
"drush en" ist nicht das, was du vielleicht willst?
Sam152
Ich brauche einen Weg, um es zu automatisieren. 'drush en' kann über die CLI ausgeführt werden. Ich möchte jedoch feststellen, welche Module neu sind und sie automatisch aktivieren.
Drachenmantank
1
Das Problem wird sein, dass das Vorhandensein eines Moduls als Dateisatz nicht bedeutet, dass Sie es aktivieren möchten. Jemand muss diese Entscheidung treffen. Wenn Sie beispielsweise Ansichten herunterladen, erhalten Sie auch die Benutzeroberfläche für Ansichten. Möchten Sie, dass dies aktiviert ist oder nicht? Es ist eine bewusste Entscheidung. Sie benötigen also eine Liste der Module und diese kann sich auch in einem Skript befinden.
Alfred Armstrong
Entschuldigung, vergiss das. Ich verstehe irgendwie, was du meinst, obwohl ich nicht sicher bin, ob alles durch make erledigt wird.
Alfred Armstrong
1
@AlfredArmstrong die Idee war, dass ich, da ich die make-Datei bereits kuratieren muss, diese nur irgendwie verwenden muss. Wenn ich möchte, dass 'devel' aktiviert ist, aber nicht 'devel_generate', dann wird nur 'devel' in die make-Datei aufgenommen. Wenn ich später entscheiden würde, 'devel_generate' zu aktivieren, würde ich das der make-Datei hinzufügen. Ich möchte es nicht nur basierend darauf tun, welche Dateien speziell aus dem von Ihnen genannten Grund verfügbar sind, also muss ich das auf irgendeine Weise kontrollieren.
Drachenmantank

Antworten:

4

Ich habe für eine Firma gearbeitet, die einen großen Entwicklungs- / Bühnen- / Produktfluss hatte, der versuchte, so viel wie möglich zu automatisieren. Alles musste in Code erledigt werden, entweder mit Funktionen oder mit Update-Hooks.

Grundsätzlich möchten Sie 1 benutzerdefiniertes Modul haben, das Update-Hooks enthält. Auf diese Weise führt ein Entwickler, wenn er ein Update in die Codebasis zieht, das Datenbank-Update aus und kann so alle erforderlichen Aktivierungs- / Deaktivierungsmodule ausführen. Die Update-Hooks wirken sich nicht auf eine Neuinstallation aus, da davon ausgegangen wird, dass das Modul bei der Installation bereits auf dem neuesten Stand ist und nur neuere Updates ausführt.

Zusammenfassen:

  1. Verwenden Sie Ihr Installationsprofil weiterhin, um die erforderlichen Installationsaufgaben auszuführen (Module aktivieren usw.).
  2. Verwenden Sie ein benutzerdefiniertes "Update" -Modul, das hook_update_NXXX () verwendet, um neue Module zu aktivieren / deaktivieren und ansonsten die Verwaltungsaufgaben Ihrer Site synchron zu halten.

Hier ist ein Beitrag, der über einen ähnlichen Ansatz spricht und Codebeispiele enthält.

coreyp_1
quelle
1

Das ist eine gute Frage. drush makeist praktisch zum Herunterladen von Modulen. Wir wollen nicht zum Aufblähen von Modulen beitragen. Über hier ist nicht der Fall verlängert werden makeauf diese Weise. Möglicherweise eignen sich Features am besten zum Verwalten des Modulaktivierungsstatus der Site sowie für andere Konfigurationsaspekte.

Screenack
quelle
1

Erwägen Sie, Ihren Workflow zu ändern.

Es hört sich so an, als ob Sie verteilte Arbeit erledigen und aktivierende Module und andere Konfigurationswerte "teilen" möchten ... irgendwie.

Wenn Sie darüber nachdenken - selbst Drupal "Core" und Drupal.org tun dies nicht. Code wird an Core- und Community-Module gesendet, die in einem kontinuierlichen Erstellungsprozess ausgeführt werden. Drupal.org und viele Projekte verwenden Jenkins.

Eine Installation von Jenkins, die auf die Drupal-Entwicklung ausgerichtet ist, verwendet auch Phing. Weitere Informationen finden Sie in diesem Git-Repo: http://reload.github.io/jenkins-drupal-template/

Mit Jenkins können Sie Code in Ihr Master-Git-Repo übertragen und die Site für eine Demo-Site aus Ihrem Installationsprofil und Ihren Drush-Makefiles erstellen. Dies löst Ihr Problem nicht genau, bietet jedoch einen Speicherort, an dem Sie alle Änderungen vornehmen, um Module hinzuzufügen / zu aktivieren / löschen, und hoffentlich brechen Sie nicht alle den Build.

Angenommen, der Build ist nicht kaputt - es ist sicher, seine Änderungen in Ihr lokales Entwicklungssystem zu übernehmen.

Jenkins + ein Staging- oder Entwicklungsserver ist nur ein Teil der Entwicklung.

Ihr lokaler Workflow kann Installationsprofile + Makefiles verwenden. Erwägen Sie, Inhalte mithilfe benutzerdefinierter Module mit Migrate zu teilen, wenn Sie sich die Zeit für die Inhaltserstellung leisten können. Beispiele für das Teilen von Inhalten mit Entwicklern, die Migrate und Phing verwenden, finden Sie hier:

http://marzeelabs.org/blog/2014/03/17/coding-as-a-team-content-fixtures/ http://marzeelabs.org/blog/2014/03/03/coding-as-a- Team-Automatisierung-mit-Phing /

Zuletzt sehen Sie dieses PDF in einer Sitzung des Drupal Camp Ohio 2014 zur kontinuierlichen Integration und Zusammenarbeit mit Ihrem Team:

Tenken
quelle
1

Für den gleichen Zweck verwenden wir Master . Es verwendet die settings.php, um Informationen über die Master-Module bereitzustellen. Mit einem einfachen Befehl werden drush master-executealle fehlenden Module (und ihre Abhängigkeiten) aktiviert und nicht mehr verwendete Module deaktiviert.

Derzeit liest das Modul keine Informationen aus dem Makefile, aber möglicherweise könnte dies eine Option für eine neue Version sein.

derhasi
quelle
0

Sie können die Module entweder manuell aktivieren, indem Sie die Option Module oder das Terminal mit dem Befehl drush aufrufen

drush en -y modulename1 modulename2 

und so weiter.

Nitesh Sethia
quelle
Ich suche nach einer Möglichkeit, dies basierend auf Makefiles zu automatisieren, nicht nur wie man ein Modul manuell aktiviert.
Drachenmantank
0

Module können auf zwei Arten aktiviert werden:

  1. entweder vom Terminal mit dem Drush- Befehl von:
    A. drush dl modulename- zum ersten Herunterladen des Moduls
    B. drush en -y modulename- zum Aktivieren des Moduls

  2. Verwenden Sie die Menüoption Modul und aktivieren Sie das Modul anhand der Anzahl der angezeigten Module.

neetu morwani
quelle
Ich suche nach einer Möglichkeit, dies basierend auf Makefiles zu automatisieren, nicht nur wie man ein Modul manuell aktiviert.
Drachenmantank
Es gibt noch einige Möglichkeiten. module_enable()zum Beispiel. Oder durch Importieren einer vorbereiteten Datenbank.
Leymannx
0

Ich möchte einige davon, die sicher sind. Die Make-Funktion wird zum Herunterladen der verschiedenen Teile der Site verwendet: Modul, Themen und Projekt über Git. Wenn Sie Ihr Installationsprofil aufschreiben, schreiben Sie die abhängigen Module in die Infodatei. Das Problem ist, wenn Sie ein neues Modul für Ihr Installationsprofil für ein vorhandenes Profil hinzufügen müssen - bin ich richtig?

Dafür müssen Sie hook_update_N verwenden, wenn das N für die Nummernaktualisierung steht. Der Hook wird für Module verwendet, die Aktionen ausführen müssen, z. B.: Aktualisieren von Schemata, Hinzufügen von Variablen, und für Sites und Distributionen wie OpenScholar, um neue heruntergeladene Module auf Live-Sites zu aktivieren.

Sie müssen dies wahrscheinlich im allgemeinsten Modul hinzufügen, und die Funktion sieht folgendermaßen aus: https://github.com/openscholar/openscholar/blob/SCHOLAR-3.x/openscholar/modules/os/os.install#L16

Der Hook muss sich in der Datei module.install befinden. Wenn Sie die Benutzeroberfläche verwenden, müssen Sie zu www.site.com/update.php gehen. Wenn Sie drush verwenden, verwenden Sie einfach den Befehl drush updb.

Roy Segall
quelle
0

Soweit ich weiß, lädt die Drush .make-Datei nur Projekte von drupal.org herunter. Wenn Sie einige Module aktivieren möchten, können Sie ein Installationsprofil verwenden ** (. Install) **. Ein Installationsprofil bietet Ihnen Optionen, welche Module Sie zum Zeitpunkt der Installation aktivieren möchten.

Kürzlich habe ich auch eine Distribution mit Hilfe von .make file beigesteuert. Sogar ich habe die ganze Erfahrung von .make hier geteilt . Ich weiß, dass dies nicht mit dem zusammenhängt, was Sie genau fragen, aber es kann Ihnen helfen, zu verstehen, was genau die .make-Datei tut.

Aus dieser ganzen Aufgabe kann man, wie ich verstehe, mit der .make- Datei die Modulaktivierung nicht automatisieren. Dazu müssen Sie einen anderen Ansatz verfolgen.

Ich hoffe diese Forum URL kann dir helfen. Drupal-Automatisierung mit Bash-Scripting und Drush .

Sie müssen ein Bash-Skript schreiben, in dem Sie genau Drush-Befehle verwenden.

drush en -y modulename
Pushpinder Rana
quelle