it-swarm.com.de

Bereitstellen komplexer Änderungen

Gelegentlich müssen wir ziemlich komplexe Änderungen an einer Website bereitstellen, die Änderungen an Datenbanken (neuen oder geänderten Tabellen) und dynamischem Quellcode (wie PHP oder ColdFusion) erfordern. Was ist der beste Weg, um diese Änderungen schnell zu packen und bereitzustellen, ohne alles auf der Live-Website zu beschädigen?

4
Justin Scott

Kurze Antwort: Es ist ein Schmerz im Nacken!

Ich musste dies mehrmals tun (und jedes Mal möchte ich beim nächsten Projekt mehr über mein Design nachdenken). Was ich tue, ist, die Codebasis in einen Entwicklungsabschnitt (oder Ordner oder Server usw.) zu unterteilen, damit ich separat daran arbeiten kann, um sicherzustellen, dass alle Fehler behoben sind, bevor ich zur Bereitstellung übergehe. Ich erstelle dann ein SQL-Skript, das immer die ersten beiden Zeilen enthält:

DELETE IF EXISTS newDatabaseName;
CREATE DATABASE newDatabaseName;

Dadurch wird sichergestellt, dass das Skript alles in eine vollständig neue und leere Datenbank stellt. Der Rest des Skripts erstellt alle Tabellen, die ich aus der alten Datenbank wieder verwende, in die neue. Dann erstelle ich die neuen (oder geänderten) Tabellen in der neuen Datenbank. Zum Schluss verschiebe ich alle Daten vom Live-Server auf den Entwicklungsserver. Dies kann lange dauern, abhängig davon, wie viele Daten Sie verschieben und wie schnell Sie sie verschieben können. Ich empfehle daher, dass Sie sich das Skript sorgfältig überlegen, denn je weniger Sie gezwungen sind, es auszuführen, desto besser.

Nachdem ich die neue Entwicklungsdatenbank eingerichtet und ausgeführt habe, müssen Sie den neuen Code erstellen, um ihn zu verwenden. Sobald dies erledigt ist, sollte die Bereitstellung relativ einfach (wenn auch möglicherweise zeitaufwendig) sein. Verwenden Sie einfach dasselbe Skript, um alle neuen Live-Daten in die neue Datenbank auf dem Bereitstellungsserver zu kopieren, und kopieren Sie den gesamten neuen Code, und fertig!

So mache ich es, und obwohl es ein Schmerz ist, funktioniert es. Wenn es einen besseren Weg gibt, würde ich gerne zuhören.

pdate: Als Antwort auf Tchalvaks Kommentar, ja, benutze ich normalerweise folgendes, um alle Tabellendefinitionen ohne ihre tatsächlichen Daten zu erhalten:

mysqldump --databases --no-data databaseName > newScript.sql

Ich werde dieses Skript dann wie oben beschrieben ändern.

3
Mike

Um "die Fähigkeit zum Rollback" zu erlangen, empfehle ich wirklich (gut) entweder git oder Mercurial(verteilte Versionskontrollsysteme) kennenzulernen.

Die Zeiten, in denen Sie mit Ihrem Quellcode in Einfachdateien arbeiten sollten, sind vorbei (jetzt sollten Sie damit in Einfachdateien arbeiten, aber über ein wirklich robustes Änderungskontrollsystem verfügen, das sie verfolgt).

2
Kzqai

Ich mache im Allgemeinen (für Websites im LAMP-Stil):

  1. definiere deine Änderungen dann schreibe ein Skript, um sie anzuwenden (ich benutze ein Makefile).
  2. Test Ihre Änderungen an einer Datenprobe, die die reale Umgebung darstellt
  3. Test nochmal um sicher zu gehen
  4. Gönnen Sie sich einen Ausweg, haben die Fähigkeit zum Rollback

Wenn Sie einen Cluster ausführen, haben Sie möglicherweise größere Kopfschmerzen mit Standortstatus, Caches usw.

0
Aiden Bell