unsere grundlegenden Anforderungen hier:Führen Sie eine angepasste Version von einer Rails-Anwendung
- Wir haben eine Basis Rails-Anwendung haben, die aktiv gepflegt wird.
- Wir möchten eine angepasste Version dieser App anbieten, vorausgesetzt, dass:
- Server müssen in unserem Kundenstandort wohnen und auf einer anderen Domäne ausgeführt werden.
- Es gibt eine spezifische Protokollierungsinstrumentation für ihre eigene Überwachung im Rechenzentrum.
Um dies zu tun, ich mehrere Möglichkeiten, dieses Ziel zu erreichen, sehen kann:
- Git-Zweigs
Rails::Engine
Rails::Application
Die naheliegendste Antwort wäre Git-Zweig sein, für volle Flexibilität.
Aber ich bin mir nicht sicher, ob es eine gute Idee ist, weil die Code-Basis weitgehend geteilt wird und die Mainline viel mehr Aktivitäten hat - das Aufholen von Rebase/Merge könnte nur ein zusätzlicher Aufwand sein.
Wir möchten die ursprüngliche und die angepasste Version so weit wie möglich entkoppeln. Mit anderen Worten, wir möchten so selten Konflikte wie möglich zwischen dem Original und dem Individuellen haben.
Rails::Engine
oder Rails::Application
schienen wie eine enge Idee (ich bin nicht vertraut mit Rails Engines), aber ich verstehe nicht, wie OurApp::Application
und OurCustomizedApp::Application
an einem Ort haben und zwischen ihnen global und dynamisch wechseln.
Wahrscheinlich wäre es schön zu haben:
- individuelle initializers, Controller und Ansichten in einem separaten Verzeichnis außer Kraft zu setzen (oder Patch) die ursprüngliche
- Fähigkeit zu spezifizieren, die app (das Original oder die kundenspezifische
config/database.yml
zu seinconfig/customer1/database.yml
- Fähigkeit zu verwenden, um die gleichen
deploy.rb
für Capistrano (p:) durch eine Umgebungsvariable wieRAILS_APP
- separate Konfigurationsdateien, wie so zu booten robably mit
config/servers.yml
undconfig/customer1/servers.yml
zu Rollen und IPs zu definieren?)
Gibt es Praktiken/Konventionen für unsere Anforderungen? Irgendein Rat?
Unsere Apps laufen auf Ruby 1.9.2 + Rails 3.0.3.
UPDATE
Wir begannen es als Zweig Git. Wir haben eine Rake-Aufgabe erstellt, um eine Datei unter config/branch
zu generieren, die Text wie "master" oder "customized" enthält, und application.rb liest sie beim Bootstrap.Configs wie database.yml
oder servers.yml
leben jetzt in config/mainline/
oder config/customized/
, und application.rb behandelt sie entsprechend.
config.paths.config.database = "config/#{branch}/database.yml"
Nicht perfekt, aber gut genug für jetzt. Ich werde aktualisieren, wenn wir einen besseren Weg finden, dies zu tun.
Wir sind mit Git-Zweig gelandet und es funktioniert bisher ziemlich gut. Vielen Dank! – kenn