Aufrechterhaltung Konfiguration Unterschiede zwischen Entwicklern und Live-Umgebungen während der Bereitstellung von SVN

StackOverflow https://stackoverflow.com/questions/922411

Frage

Wir verwenden das Expression CMS (php) Webseiten zu erstellen. Für jeden Standort setzten wir eine Subversion-Repository und die EE-Installation sowie alle benutzerdefinierten Vorlagen begehen, Bilder, Javascript, usw. verwendet werden. Eingeschlossen im Repository ist die Datei alle Umgebungsvariablen und die .htaccess-Datei enthält.

Wir haben einen Entwicklungsserver mit einer Arbeitskopie des Repositorys über aktualisierte post-commit, dass wir zu entwickeln, verwenden. Wenn wir bereit sind, lösen wir eine Niederlassung in Subversion zu erstellen, alle Änderungen für die Produktionsumgebung erforderlich machen, die Release-Nummer markieren, das Repository exportieren, laden Sie sich in ein neues Verzeichnis auf dem Live-Server und die Dateien an ihrem Platz Symlink. Ein Rollback ist so einfach wie ein SymLink zurück zur vorherige Version.

Das Problem ist, dass der Schritt, wo wir die Umgebungsvariablen ändern, die für die Entwickler und Produktionsserver, anders zu sein braucht. Dies ist Sachen wie (un) kommentiert .htaccess Regeln, die auf den falschen Orten umleiten würde, google map API-Schlüssel auslagern, da die Domänen unterschiedlich sind, das Ausführen von Skripts, die die JavaScript-Code in einer verschleierten Datei minimieren, um die Größe und HTTP-Verbindungen zu halten, usw. .

Die Frage ist, wie dies könnte mehr automatisiert werden? Wir würden gerne das Freigabeverfahren nach unten auf das absolute Minimum zu bekommen. Ich bin vertraut mit der Existenz von Werkzeugen wie Capistrano und mache, aber ich bin nicht sicher, wie ich bekommen konnte sie notwendig, um alle Dateien zu ändern ... wie würden Sie organisieren so etwas tun? Ist das wert, Zeit zu automatisieren, wenn es alle paar Wochen vielleicht einmal passiert?

War es hilfreich?

Lösung

Viele der Konfigurationsoptionen können mit _SERVER durch Einschalten $ behandelt werden [ ‚HTTP_HOST‘].

Zum Beispiel

switch ($_SERVER['HTTP_HOST']) {
    case 'developement.domain.com':
        $api_key = "dev environment api key";
        break;
    default:
        $api_key = "live environment api key";
}

Dann für .htaccess-Ausgaben können Sie eine alternative .htaccess-Datei in Ihrer vhost Definition mit der Anweisung Access gesetzt:

<VirtualHost *:80>
    ServerName sitename
    AccessFileName .htaccess-dev
</VirtualHost>

Andere Tipps

ich mit diesem Problem umgehen, indem das Hinzufügen Konfigurationsdatei Subversion ignorieren Liste . Es wurde bereits angesprochen hier auf Stackoverflow: 149485 Frage # sehen

Grundsätzlich halte ich nur setup.default.php in SVN, und in jeder Installation ich manuell kopieren setup.php es, die auf Ignore-Liste ist. Dies verhindert, dass die Datei in das Repo zu prüfen zurück. Es gibt selten ändert auf diese Datei und kann behandelt werden, wie die Anforderung auftritt.

Eine weitere Alternative ist die Konfigurationsdateien einmal verzweigen, in eine Freigabezweig, und markieren Sie diese dann wie auf dem Ziel bearbeitet und dann einen Merge-Skript, das weiß noch, wie eine Drei-Wege-Zusammenführung zu tun. Wenn die Konfigurationsänderungen an der Quelle, dann wird es erzeugt wahrscheinlich einen Konflikt, was eine gute Sache ist, weil Sie wahrscheinlich ähnliche Änderungen auf dem Ziel tun müssen.

So halten Sie zwei Bäume für die gesamte Lebensdauer des Projekts gehen: Entwicklung und Freigabe. So wie die Dinge in der Entwicklung reifen, integrieren Sie sie über lösen. Sie können einen dritten, QA, Baum als auch haben, wenn Sie einen beteiligten Freigabeprozess haben.

Wenn Sie eine neue Version ziehen, kopieren Sie aus dem Arbeitsbereich des „Freigabe“ Bereich (als merge / Integration), anstatt eine völlig neue Niederlassung zu ziehen. Wenn Sie auch einen Schnappschuss-in-Zeit des Release Baum an diesem Punkt wollen, dann machen Sie einen eigenen Zweig / Kopie / Tag, das Sie nur für Archivierungszwecke verwendet werden.

Btw. Dies ist einer der Bereiche, in denen Perforce scheint - es erinnert, was Sie bereits zusammengeführt und werden nicht immer zweimal zu fusionieren versuchen

Wir beschäftigen uns mit dieser durch eine config-spezifischen Verzeichnis beibehalten wird.

So zum Beispiel, wenn Sie verschiedene .htaccess und config.php Dateien zwischen Entwicklern und Produktion haben sie würden in / trunk / config / {Umgebung} beibehalten werden /

Wir verwenden ant / Nant Skripts Release-Pakete zu erstellen, und die Skripte haben eine Build-Task für jede Umgebung. Diese Aufgaben nehmen die Config-spezifischen Dateien.

-

Ein weiterer Kommentator schlägt vor, auf HTTP_POST zu wechseln. Leider Kommentar kann es nicht direkt (nicht hoch genug rep). Mit HTTP_POST Umweltkonfiguration zu bestimmen hat, potenzielle Sicherheitsprobleme, da der Wert dieser vom Client kommt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top