2009-07-17 3 views
0

Ich habe ein Projekt mit einer lokalen Entwicklungsumgebung geerbt, die Code für diesen Computer hat und der für den Produktionsserver unterschiedlich ist. Obwohl der Großteil davon in Konstanten enthalten ist und der Rest in den Tests enthalten ist, muss ich jedes Mal, wenn ich von der Entwicklung und der Aktualisierung in der Produktion einnehme, dieselben Änderungen in der Produktion vornehmen. Glücklicherweise ist dies ein internes Tool mit geringer Lautstärke.Wie die Änderungen zwischen Produktion und Entwicklung beim Aktualisieren aus dem Repository effizient gehandhabt werden

Ich denke, ich könnte ein Skript schreiben, um es zu automatisieren, aber ich hoffe, es gibt eine bessere Lösung. Hat noch jemand dieses Problem gelöst?

Diese Fragen sind ähnlich, aber nicht die gleiche Sache zu fragen, nur damit Sie wissen, ich sah:

(1) make changes to a production database

(2) transferring changes from dev to prod

Edit: Nelson LaQuet mich setzen auf das, was Ich glaube, das ist die richtige Spur, die mich zu Configuring Rails Applications führte. Ich bin jedoch nicht sicher, wie meine FormController < ApplicationController-Konstanten, wie MyExternalCodeDir, in Config/environments/production.rb und config/environments/development.rb verweisen.

Auch ich möchte nicht jeden Verweis auf MyExternalCodeDir auf etwas wie config.MyExternalCodeDir ändern müssen.

Antwort

3

Sie abstrahieren alle Umgebungseinstellungen (Datenbankverbindung/Pfad/URIs) in eine einzige Datei. Nennen wir es "config.ini"

Dann committieren Sie einfach eine "Vorlage" namens "config.ini.template", die die Struktur der Konfigurationsdatei enthält und eindeutig dokumentiert, was bei jedem Wert erwartet wird - und sinnvolle Standardwerte. Sie übergeben diese Datei dann.

Löschen Sie die aktuelle config.ini-Datei, die für Ihren Standort spezifisch ist, und fügen Sie sie zu svn: ignore hinzu. Wenn Sie nun config.ini.template in config.ini kopieren und einfügen und Ihre Einstellungen ändern, wird es nicht dem Repository übergeben.

Es fügt einen zusätzlichen Schritt pro Implementierung hinzu, muss jedoch nur einmal ausgeführt werden (es sei denn, Sie fügen Konfigurationsoptionen hinzu oder entfernen diese). Dies ist die beste und standardmäßige Art, das zu erreichen, was Sie wollen.

+0

... und Sie können Ihre maschinenspezifischen Einstellungsdateien als config.development.ini und config.production.ini oder etwas festlegen. Kein Code würde sich auf diese Dateien beziehen, aber alles, was Sie tun müssen, um einen neuen Checkout durchzuführen, ist das Umbenennen der entsprechenden Datei. Außerdem erhalten Sie alle Vorteile der Quellcodeverwaltung für Ihre spezifischen Ini-Dateien. – RichieHindle

+0

Ich bin verwirrt. Ich lösche die config.ini, die meine spezifischen Einstellungen hat, dann kopiere die Vorlage in die config.ini und ändere sie wieder in meine Einstellungen ... warum lösche ich sie überhaupt? – kajaco

+0

Sie können es also zu svn: ignore hinzufügen, wodurch es niemals den Code "repository" erreicht. – nlaq

0

Ich würde die Werte der Konstanten verschieben, die in einer Konfigurationsdatei umgebungsspezifisch sind, was die Handhabung erleichtern würde. Ich würde den Code auch in nur einem Repository im Versionskontrollsystem aufbewahren und die Build-Ausgaben in zwei getrennten Repositories verwalten: einen für die Testumgebung und einen für die Produktion. Auf diese Weise kann ich meine Codebasis verwalten, wie auch immer ich sie auswähle, und wenn ich sie bereitstellen möchte, werde ich zuerst testen und dann von Test zu Produktion verschmelzen und an diesem Punkt einfach die Konfigurationsdatei verteilen und die korrekte Konfiguration für die Produktion beibehalten Umgebung.