Wie füge ich Änderungen von einer Entwicklungskopie der Site zur Live-Site zusammen, ohne neuen Inhalt zu verlieren?

40

Was ist das beste Verfahren zum Zusammenführen der Arbeit an einer Entwicklungskopie einer Site zur Live-Produktionskopie? Seit Beginn der Entwicklung der neuesten Funktionen wurden der Website häufig viele neue Inhalte hinzugefügt. Und die meisten Ergänzungen einer Site erfordern Datenbankänderungen. Das Kopieren neuer Dateien ist also einfach, aber was ist mit der Datenbank? Wie können Sie Ihre Änderungen mit der vorhandenen Produktionsdatenbank zusammenführen, ohne neue Inhalte zu verlieren, die seit der letzten Aktualisierung der Produktionssite hinzugefügt wurden? Gibt es Module, die dabei helfen?

Chaulky
quelle
2
Verwirrung beseitigen: Zusammenführen und Migrieren sind zwei verschiedene Wörter. Sie haben beide in Ihrer Frage verwendet. Wenn die Live-Site leer ist, müssen Sie die Entwicklungskopie auf die Live-Site / den Host migrieren. Wenn die Live-Site bereits Inhalte enthält, müssen neue Inhalte von der Entwicklungskopie zur Live-Site zusammengeführt werden (das Zusammenführen ist etwas schwierig). Was musst du tun?
user931

Antworten:

16

Informationen zu Inhaltstypen, Ansichten und Strukturänderungen auf der Entwicklerwebsite finden Sie unter Features zum Exportieren der Datenbank in Code.

Für die Migration von Inhalten gibt es viele Optionen, aber keine einzige solide Lösung. Ein Beispiel ist die Deployment Suite .

budda
quelle
Die Demployment-Suite sieht auf jeden Fall interessant aus, obwohl sie noch in der Entwicklungsphase ist (noch nicht einmal eine Beta). Hast du es selbst benutzt? Wissen Sie etwas, das es nicht abdecken würde?
Chaulky
2

Ich habe hier im Grunde genommen zwei Denkschulen übernommen (eine 3. Denkschule, die Datenbankunterschiede macht, werde ich nicht diskutieren, da die Komplexität ziemlich hoch ist).

1) Stellen Sie das Produkt bereit, indem Sie die Produktionsdatenbank löschen und einen mysqldump der Entwicklungsdatenbank importieren. Optional können Sie zuvor ein reguläres Suchen / Ersetzen für alle fest codierten absoluten Links ausführen, die auf die Entwickler-URL im SQL-Speicherauszug verweisen. Führen Sie nach dem Import der dev db in prod automatisch SQL-Anweisungen aus (normalerweise über ein Skript), um anschließend alle Einstellungen zu ändern, die für prod anders sind als für dev (z. B. haben Sie in der Variablentabelle möglicherweise einige Verbindungseinstellungen für die Verbindung mit externen Systemen, die Sie benötigen auf prod externe Systeme anstatt auf die dev-Version umstellen).

2) Verwenden Sie die Funktionen Modul, wie Budda erwähnt, für die Admin - Einstellungen und die Verwendung Knoten Export - Modul für Content - Export / Import in Kombination mit dem Löschen Alle Modul. Der Workflow ist also:

  1. Verwenden Sie node_export und features, um Knoten / Features in Dateien zu exportieren
  2. Optional (und hoffentlich) Versionskontrolle
  3. Laden Sie die Dateien auf das Prod-System
  4. Verwenden Sie die Drush- oder Admin-Oberfläche, um Funktionen zu laden
  5. Verwenden Sie die Drush-Delete-All- oder Admin-Oberfläche, um alle Knoten der Typen zu löschen, die Sie importieren möchten
  6. Verwenden Sie drush ne-import oder die Admin-Oberfläche, um die Knoten aus der exportierten Knotendatei zu importieren.

Ein Hinweis, ich würde dringend empfehlen, einen Standard-Workflow zu übernehmen, bei dem der Inhalt nur in eine Richtung geht. Entweder Dev -> Prod oder Prod -> Dev (ich bevorzuge diesen).

Ich habe dies getan und mache dies auf einigen großen Systemen mit ziemlich guten Ergebnissen, aber es wird immer viele Möglichkeiten geben, diesen Apfel in Scheiben zu schneiden, je nachdem, welche Methode für Sie am besten geeignet ist.

coderintherye
quelle
Wie erstellen Sie in Option 1 den Inhalt neu, der der Live-Site hinzugefügt wurde, die sich nicht auf der Entwickler-Site befindet? Es scheint, als würden Sie alles mit der dev db überschreiben und dann möglicherweise einige Einstellungen / Variablen ändern. Welche Denkschule verwenden Sie derzeit auf Ihren Websites? Irgendwelche Vor- und Nachteile für jeden Ansatz?
Chaulky
In Option 1 verwenden wir jetzt node_export, um den Inhalt regelmäßig zu senden (nachdem vorheriger Inhalt entfernt wurde). Früher haben wir sowohl an dev als auch an prod inhaltliche Änderungen vorgenommen. Dies ist tatsächlich ein häufiges Szenario an einigen Stellen, die ich gesehen habe, obwohl es offensichtlich nicht ideal ist. Aus diesem Grund füge ich hinzu, gehe eine Richtung ein und bleibe dabei. Entweder geht der Inhalt auf dev -> prod oder prod -> dev, aber versuche nicht, beides zu tun. Und ja, wir überschreiben im Grunde genommen, obwohl es sich eher um Löschen und Wiederherstellen handelt. Bei meinem neuen Job machen wir # 2, bei meinem alten Job haben wir # 1 gemacht, sind aber auf # 2 umgezogen (ich berate immer noch für sie).
Coderintherye
1

Sichern Sie die Datenbanken der Live-Site-Kopie und die Entwicklungskopie der Site in der SQL-Datei (verwenden Sie dieselben Parameter und Einstellungen für beide Sicherungen).
Vergleichen Sie dann beide SQL-Dateien mit einem kleinen Vergleichstool ExamDiff . Es werden Dateiunterschiede nebeneinander mit verschiedenen Farben angezeigt. Sie können auch direkt zu den Unterschieden springen (ohne scrollen zu müssen). Untersuchen Sie die Unterschiede und fügen Sie Zeilen zur SQL-Datei der Live-Site hinzu bzw. bearbeiten Sie sie. Stellen Sie sicher, dass diese Datei keinen absoluten Pfad / URL der Entwicklungsumgebung enthält. Das ist erledigt! Zeit zum Wiederherstellen der Datenbank für die Live-Site.
Machen Sie sich das Leben leichter:Sichern Sie im ersten Schritt nur die Tabellen, die geändert wurden. Wenn Sie beispielsweise ein Modul in der Entwicklungskopie bearbeitet haben, das auf eine separate Tabelle abzielt, geben Sie nur diese Tabelle aus. Wenn Sie sich bei einer bestimmten Tabelle nicht sicher sind, ist der gesamte Datenbankspeicherauszug in Ordnung.

user931
quelle
Diese Technik weist unter einigen wichtigen Umständen starke Einschränkungen auf. Wenn die Entwicklungssite beispielsweise über neue Knoten verfügt, enthalten Ihre beiden Datenbanken Einträge mit denselben Knoten-IDs. Verweise können nicht aufgelöst und aus einem Text-Dump der SQL-Datenbank zusammengeführt werden. Diese Art von Vorgang wird, wie in anderen Antworten erwähnt, besser über Funktionen und Bereitstellung abgewickelt.
greg_1_anderson 30.03.12 um 17:44