5

是否可以在通用名称空间下创建整个rails应用程序?我可以在新的rails应用程序中使用通用名称空间吗?

让我们假设我的公司名称是Acme公司,并且我有以下Rails项目:Blog,Store,WebService。

默认情况下,如果我这样做rails new blog生成的应用程序将是这样的:

module Blog 
    class Application < Rails::Application 

module Store 
    class Application < Rails::Application 

module WebService 
    class Application < Rails::Application 

,每一个项目/应用程序是自包含的,不存在对公司没有隐式引用。我非常希望有公司命名空间下这一切的应用程序,所以我们可以把它们称为:

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

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

etc... 

这可能吗?推荐的?


使用: 红宝石2.0.0-P451,轨道3.2.17


做轨道新极致/博客后的建议更新

快照生成的文件和项目结构:

snapshot

+0

那么如何调用该类的方法以及在哪里包含该模块呢? –

+0

这3个应用程序应该是相互独立的。类方法和模块应该以默认应用程序调用的相同方式调用。包括AcmeInc只是将所有这些应用程序按照公司的代码库标识符进行分组。这是.net世界中很常见的过程,但我不确定ruby/rails应用程序是否应遵循相同的模式,因此我的问题。 – qbantek

+0

该分组的用途是什么?如果你试图让自包含的应用程序共享一些元素并进行交互,你可能需要看看[Rails引擎](http://guides.rubyonrails.org/engines.html)。如果你的担心只是为了美化目的的命名空间,我认为你可能在那里打击一些约定。 – tirdadc

回答

1

正确的方法是使用引擎。每个引擎就像一个独立的应用程序,用它自己的路线,测试套件,等等,但你可以有一个像耙子任务的一些常见的基础设施等

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

0

如果您为了管理你的代码,你为什么不制作一个可以包含在每个应用程序中的Blog Gem。然后,您将在Gem的一个公共存储库下管理代码。对我来说,这是Rails/Ruby的方式来做到这一点

1

我想我大概是晚在这里回答这个,因为其他人已经提出了很好的方法。就像在一个公共存储库中维护代码并创建rails引擎一样。

我想分享这个名为spree的着名项目,它遵循您正在寻找的架构。你可以访问狂欢的code on github here

例如:

  • Spree::Core - spree_core发动机作为宝石,以保持所有模型和基础模块等
  • Spree::Backend - spree_backend发动机作为宝石以保持所有管理相关的控制器,视图,资产等
  • Spree::Frontend - spree_frontend引擎作为宝石来维护面向用户的代码ie cont滚筒,视图,与之相关的资产。

我猜你可以用它作为你的应用程序开发的参考。

+0

谢谢你提到施普雷。我将代码分解为一个项目的参考。 – qbantek

+0

当然,我也会鼓励你看看rails代码库。它会帮助你理解框架结构和黑客行为。 :) – Surya

相关问题