Kombination von 2 Rails-Apps mit einer einzigen Codebasis

8

Unser Unternehmen begann mit einem einzigen Produkt, einer Rails-App, die von einigen Java-Services unterstützt wurde, und entschied dann, dass sie ein anderes Produkt wollten, das sich anfangs erheblich von dem ersten unterschied. Aber im Laufe der Zeit haben wir erkannt, dass sie anfangen konvergieren, und eine Codeänderung zu einer zu machen erfordert eine ähnliche Codeänderung zur anderen für eine neue Feature / Bugfix. Dies wird offensichtlich zu einem Schmerz.

In einigen Fällen haben wir Edelsteine, die etwas von dieser Funktionalität teilen, aber es geht über Ruby hinaus in Javascript, css usw ..

Ich bin also beauftragt, diese beiden Apps zu einer Codebasis zusammenzuführen. Ich denke, wir würden uns wünschen, dass es eine einzelne App mit permission-based role access ist, aber das wird viel später kommen.

Mein erster Gedanke, sie schnell zusammenzusetzen, besteht darin, zwei Rails-Engines zu erstellen und gemeinsame Libs zwischen ihnen zu teilen. Ich denke, das ist der schnellste Weg, den Code zu kombinieren, gemeinsame Abschnitte zu finden und mit der Freigabe zu beginnen.

Mein erstes Problem ist jedoch, wie man zwischen den Apps routet. Eine App verwendet einen einzelnen Domainnamen, der sich nie ändert, die andere App hat viele Domains. Kann jemand vorschlagen, wie ich eine bestimmte Anfrage an eine bestimmte App weiterleiten kann, damit sie getrennt bleiben und starten können, während sie eine gemeinsame Codebase von Bibliotheken teilen?

Oder, wenn jemand andere Vorschläge hat, wie man diese Apps kombinieren kann, bin ich ganz Ohr.

Beide sind Rails 2.3.10-Apps mit JRUBY 1.5.3, aber wir sind offen für ein Upgrade auf Rails3, wenn das die Dinge wesentlich einfacher oder sauberer machen würde (zB mit besserer Rack-Integration)

Ich habe keine Rack-Programmierung gemacht, aber es tut mir nie weh zu lernen, ob das unser Leben leichter machen wird.

    
brad 18.11.2010, 22:23
quelle

2 Antworten

1

Ihre Idee, Motoren zu verwenden, würde ich vorschlagen.

Für das Routing würde ich es außerhalb von Rails behandeln.

Sie würden beispielsweise in nginx Folgendes tun:

%Vor%     
Rafi Jacoby 24.11.2010, 19:45
quelle
2

Sie sollten es vermeiden, Code auf Serverebene zu teilen, am besten, wenn Sie Bibliotheken mit gemeinsamer Codebasis erstellen und sie während der Entwicklung verwenden würden. Das wahrscheinlich beste Shooting wäre die Verwendung von Helfern, da es am einfachsten ist, Module bereitzustellen, die Funktionalitäten für den gesamten Code bereitstellen.

Was das Umschreiben von Funktionen in eine Anwendung betrifft, wählen Sie diese mit einem größeren Satz von Ready-Code als Basis. Es sollte möglich sein, den Code pro Methode zu migrieren, indem ein Webserver verwendet wird, der das Umschreiben von URLs unterstützt. Ich dachte Apache mit mod_rewrite zu verwenden. Also wäre der Plan:

  1. Richten Sie beide Anwendungen so ein, dass sie über einen Apache zugänglich sind.
  2. Wählen Sie eine Methode, die beiden ähnlich ist, und schreiben Sie sie in einer Anwendung neu, um die Anforderungen beider Anwendungen zu unterstützen.
  3. Fügen Sie in apache eine mod_rewrite-Regel hinzu, um den Verkehr nur für diese Aktion an eine Anwendung umzuleiten.
  4. Gehe zu Punkt zwei, bis alles neu geschrieben wurde.
  5. Entfernen Sie die alte Anwendung und passen Sie routing / mod_rewrite an, um die eine Anwendung zu verwenden

Sie müssen keinen Apache verwenden, es sollte andere Webserver geben, die das Umschreiben von URLs unterstützen.

Ich dachte daran, diesen Algorithmus zu verwenden, um unsere Anwendung auf Rails 3.0 umzuschreiben.

    
mpapis 19.11.2010 21:43
quelle