5

Ist es möglich, ganze Rails-Anwendungen unter einem gemeinsamen Namespace zu erstellen?Kann ich in neuen Rails-Anwendungen gemeinsame Namespaces haben?

Nehmen wir an, dass mein Firmenname Acme, Inc. ist und ich habe die folgenden Schienen Projekte: Blog, Store, WebService.

standardmäßig, wenn ich so etwas wie rails new blog tun werden die generierten Anwendungen wie:

module Blog 
    class Application < Rails::Application 

module Store 
    class Application < Rails::Application 

module WebService 
    class Application < Rails::Application 

wo jedes Projekt/Anwendung selbst enthalten ist, und es gibt keinen impliziten Bezug auf das Unternehmen. Im Idealfall würde Ich mag all diese Anwendungen unter dem Firmennamensraum haben, so können wir sie als verweisen:

AcmeInc::Blog::Application 
    AcmeInc::Blog::Entities::Article 

AcmeInc::Store::Application 
    AcmeInc::Store::Entities::Product 
    AcmeInc::Store::Entities::Order 
    AcmeInc::Store::Entities::Customer 

etc... 

Ist das möglich? Empfohlen?


Verwendung: Rubin-2.0.0-P451, Schienen 3.2.17


aktualisieren

Snapshot von generierten Dateien und Projektstruktur nach Schienen neues acme/Blog wie vorgeschlagen zu tun :

snapshot

+0

Dann, wie Sie diese Klassenmethoden aufrufen können und wo Sie dieses Modul einbeziehen? –

+0

Diese 3 Anwendungen sollten unabhängig voneinander sein. Klassenmethoden und -module sollten genauso aufgerufen werden, wie sie in der Standard-App aufgerufen werden. Die Aufnahme von AcmeInc dient nur dazu, alle diese Apps unter der Codebasis-ID des Unternehmens zu gruppieren. Dies ist ein sehr übliches Verfahren in der .net-Welt, aber ich bin mir nicht sicher, ob Ruby/Rails-Apps dem gleichen Muster folgen sollten, daher meine Frage. – qbantek

+0

Welchen Zweck erfüllt diese Gruppierung? Wenn Sie versuchen, eigenständige Anwendungen zu verwenden, die einige Elemente teilen und interagieren, sollten Sie sich [Rails-Engines] (http://guides.rubyonrails.org/engines.html) ansehen. Wenn Ihr Anliegen nur der Namensraum für kosmetische Zwecke ist, denke ich, dass Sie dort vielleicht einige Konventionen bekämpfen. – tirdadc

Antwort

1

Der richtige Weg, dies zu tun ist mit Motoren. Jeder Motor ist wie eine Standalone-Anwendung, mit seiner eigenen Routen, Test-Suite, etc, aber Sie können eine gemeinsame Infrastruktur wie Rake Aufgaben usw.

http://guides.rubyonrails.org/engines.html

0

Wenn Sie Wenn Sie versuchen, Ihren Code zu verwalten, erstellen Sie einfach einen Blog-Schmuck, den Sie in jede Anwendung aufnehmen können. Dann würden Sie den Code unter einem gemeinsamen Repository für das Gem verwalten. Seht mir, das ist der Rails/Ruby-Weg, dies zu tun

1

Ich glaube, ich bin hier wohl zu spät, dies zu beantworten , da andere bereits nette Ansätze vorgeschlagen haben. Zum Beispiel die Pflege von Code in einem gemeinsamen Repository und das Erstellen von Rails Engine.

Ich möchte dieses berühmte Projekt namens spree teilen, das der Architektur folgt, die Sie suchen. Sie können Spree code on github here besuchen.

Zum Beispiel:

  • Spree::Core - spree_core Motor als Edelstein, alle Modelle und Basismodule usw.
  • Spree::Backend zu halten - spree_backend Motor als ein Juwel alle Admin gerichteten Steuerungen zu halten, views, assets usw.
  • Spree::Frontend - spree_frontend motor als ein schmuckstück, um den nutzercode zu erhalten, dh cont Rollen, Ansichten, Vermögenswerte im Zusammenhang damit.

Ich denke, Sie können es als Referenz für Ihre Anwendungsentwicklung verwenden.

+0

Vielen Dank für die Erwähnung von Spree. Ich verzweige den Code, um es als Referenz für ein Projekt zu verwenden. – qbantek

+0

Sicher, ich werde Sie auch ermutigen, in Rails Code Base zu suchen. Es wird Ihnen helfen, die Framework-Architektur und Hacks zu verstehen. :) – Surya

Verwandte Themen