2017-05-31 2 views
0

Wir suchen nach einer sehr großen Schienenanwendung und erwägen den Einsatz von Motoren zur besseren Trennung von "Modulen" aus der Hauptanwendung heraus.Workflow für den Bau von Schienenmotoren als Edelsteine ​​

Wir haben diesen Prozess gestartet, indem wir eine kleine Engine mit dem Edelstein-Motorhead (die Idee seiner active_if-Komponente wird gesucht) erstellt. Diese Engine wurde dann aus der Haupt-App entfernt und mit git init versehen und dann zu github geschoben.

die Haupt-App konnte dann den Edelstein innerhalb der Gemfile ziehen.

Während dieser Proof of Concept, es funktioniert, aber nicht sehr effizient, und auch die Aktualisierung der neuen Engine/Edelstein ist ein bisschen peinlich auf diese Weise, wie es ein Submodul in gewisser Weise ist. Was ist der richtige Arbeitsablauf für den Bau und die Wartung von Motoren/Edelsteinen beim Bau einer solchen modularen App?

Vielen Dank im Voraus

+0

Sie können Ihre Motor-Edelsteine ​​nehmen und sie in Ihre Haupt-Rails-App einbetten; zum Beispiel unter 'app/engines' oder' lib/engines'; Verwenden Sie dann Ihre Gemdatei, um den Edelstein direkt von diesem relativen Pfad zu laden (mit der Option 'path:'). Dies hält alles in einem Repository, aber logisch vollständig getrennt, und Sie haben die Möglichkeit, jede Engine auf Wunsch zu einem echten Juwel zu extrahieren. –

+0

Danke Robert, und ja, wir haben beide Möglichkeiten ausprobiert. Die Hauptfrage ist, WENN wir sie komplett getrennte Edelsteine ​​haben möchten, wie kann man sie am besten weiterentwickeln? d. h. sie haben derzeit keine gemfile usw. und können nicht alleine über den rail server gestartet werden. Auch wenn eine Änderung an dem Edelstein vorgenommen wird (erneut während der Entwicklung), muss die Haupt-App neu gestartet werden oder Edelsteinfeder – Rockman

+0

Ihr Kommentar ist das Argument für Monolithen statt SOA. DHH's Position: https://m.signalvnoise.com/the-majestic-monolith-29166d022228 – toddmetheny

Antwort

0

Der akward Teil über Gems oder Motoren als Module ist die ständige Notwendigkeit zur Aktualisierung bereitstellen. Wir hatten viel Erfolg bei der Verwendung:

bundle config local.my_gem ~/projects/my_gem/

Auf dem Gem/Motor-Version auf der Platte zeigen werde die Gemfile und Gemfile.lock ohne Änderung.

die lokale Bedienung Lauf zu entfernen:

bundle config --delete local.my_gem ~/projects/my_gem/

Damit sollten Sie die Zeiten der Gemfile.lock muss aktualisiert werden, um die Implementierungszeit beschränken können.

Verwandte Themen