Situation
Um dies als erstes herauszuholen: Ich bin kein Magento-Entwickler. Ich weiß nicht viel darüber. Ich berate mich nur, wenn es um Server- und Projektmanagementprobleme geht. Ich werde mir gelegentlich die Hände schmutzig machen, wenn es Probleme gibt, aber ich weiß nichts über die "Magento-Methode", Dinge zu tun.
Wir haben eine Magento-Site (1.9.3.4), an der wir aktiv entwickeln. Wir haben einen Produktionsserver und einen Entwicklungsserver.
Problem
Magento (wie WordPress) ist sehr datenbankabhängig. Wir können Code ohne Probleme versionieren und übertragen. Wir benötigen jedoch eine einfache und zuverlässige Methode zum Zusammenführen der Datenbanken.
In der Produktion möchten wir Produkte, Bestellungen, Bewertungen, Site-Konfigurationen (wie URL) usw. beibehalten. und bei der Entwicklung möchten wir CMS, Plugin-Konfigurationen (besonders problematisch, wenn wir ein neues Plugin installieren) usw. beibehalten.
Derzeit sichere ich beide Datenbanken manuell, schneide die nicht gewünschte Tabelle aus jeder aus und kombiniere sie. Ich schiebe dann die resultierende Frankensteinsche Datenbank in die Produktion. Dies ist so fehleranfällig, wie Sie sich vorstellen können.
Es muss einen besseren Weg geben, dies zu tun.
Andere Wege
Ich habe mit der Idee einer gemeinsam genutzten Datenbank gespielt, aber das ist nicht ideal, da nicht genehmigte Änderungen an Produkten und Seiten sich auf den Produktionsstandort auswirken würden.
Ich habe auch mit der Idee gespielt, die Datenbank-Dumps in Git zu leiten, aber das erfordert immer noch, dass ich weiß, welche Tabellen von der jeweiligen Datenbank aufbewahrt werden sollen.
Aktualisieren
Wenn ich jetzt darüber nachdenke, wäre der bessere Weg hier, einen zweiten "Staging" -Speicher in der Produktionsumgebung zu haben, anstatt einen separaten Entwicklungsserver? Vorsichtsmaßnahmen?
Interessante Frage verwirrt mich zwar ein wenig, aber hier ist meine Einstellung dazu, die stark auf Meinungen basiert.
In Wirklichkeit sollten Ihre Produkt- und Entwicklungsdatenbank (meistens) übereinstimmen.
Derzeit arbeite ich so, dass die Datenbank vom Produkt in eine Staging- / lokale Umgebung ohne Kundendaten, ohne Bestellungen, Kundenkonten, Angebote usw. heruntergezogen wird.
Ich mache dann meine Entwicklung und wenn es irgendetwas gibt, das sich in Bezug auf die Datenbank ändern muss, wenn ich zur Produktion gehe, dann werden diese in einem Upgrade-Skript ausgeführt. Diese werden automatisch entweder bei der Bereitstellung mit etwas wie magerun oder beim Anmelden beim Administrator ausgeführt.
Für Dinge vom Typ Store-Konfiguration habe ich normalerweise ein
Client_Core
Modul und Skripts zum Aktualisieren von Systemkonfigurationsdaten, die nach der Bereitstellung ausgeführt werden und die Änderungen sofort sichtbar sind.Da die gesamte Arbeit, die ich mache, zuerst in die Staging-Umgebung gehen muss, bedeutet dies im Grunde, dass nach der Bereitstellung in der Produktion die beiden Umgebungen wieder übereinstimmen, bis die nächste Version erstellt wird.
Der einzige Nachteil dieses Prozesses ist, dass wir eine Version mit 3/4 neuen Funktionen erstellen und diese in der Staging-Umgebung bereitstellen, und der Client dann entscheidet, dass er keine dieser Funktionen möchte Setzen Sie die Version zurück, damit der Code zurückgesetzt wird, und synchronisieren Sie die Datenbank erneut.
Grundsätzlich sage ich, dass wir fast nie manuelle Änderungen vornehmen, auch nicht an Dingen wie CMS-Blöcken / Seiten. Die einzige Einschränkung besteht darin, dass der Client möglicherweise Änderungen vornimmt. Bevor wir also Bereitstellungen / Datenbank-Resync durchführen, stellen wir sicher, dass beim Staging nichts vorhanden ist, das der Client beibehalten möchte.
Ich hoffe, dies gibt Ihnen einige Gedanken / Einsichten, um Ihnen zu helfen, da ich sagte, es ist nur mein Arbeitsprozess und meine Meinung.
quelle