【问题标题】:Can I have common namespaces in new rails applications?我可以在新的 Rails 应用程序中使用通用名称空间吗?
【发布时间】:2014-05-13 18:00:01
【问题描述】:

是否可以在一个公共命名空间下创建整个 Rails 应用程序?

假设我的公司名称是 Acme, Inc.,并且我有以下 Rails 项目:博客、商店、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...

这可能吗?推荐?


使用: ruby-2.0.0-p451,导轨 3.2.17


更新

按照建议执行 rails new acme/blog 后生成的文件和项目结构的快照:

【问题讨论】:

  • 那么如何调用该类方法以及在何处包含该模块?
  • 这三个应用程序应该相互独立。类方法和模块的调用方式应与在默认应用程序上调用它们的方式相同。包括 AcmeInc 只是将所有这些应用程序分组在公司的代码库标识符下。这是 .net 世界上非常常见的过程,但我不确定 ruby​​/rails 应用程序是否应该遵循相同的模式,因此我提出了问题。
  • 该分组有什么用途?如果您正在尝试拥有共享某些元素并进行交互的自包含应用程序,您可能需要查看Rails engines。如果您关心的只是用于装饰目的的名称空间,我认为您可能会在那里与一些约定作斗争。
  • @tirdadc 我的大部分项目(至少在过去 10 年左右)都是 Microsoft-.Net 应用程序,我相信它是我提到的命名空间代码的扩展实践。它有点超出化妆品的范围,但不一定是必需的。我的问题是关于我是否应该遵循我的旧做法和惯例或只是适应(没问题!)适应 RoR 方式的建议。
  • @tirdac 我相信您是第一个通过建议使用引擎来回答我的问题(“这可能吗?推荐?”)并放弃我试图从中导入的命名空间的概念.Net 到 RoR。如果您将您的评论作为答案,我很乐意选择它作为我的问题的解决方案。谢谢!

标签: ruby-on-rails ruby-on-rails-3 namespaces project-structure


【解决方案1】:

正确的方法是使用引擎。每个引擎都像一个独立的应用程序,有自己的路由、测试套件等,但您可以拥有一些通用的基础设施,如 rake 任务等。

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

【讨论】:

    【解决方案2】:

    我想我可能迟到了,因为其他人已经提出了很好的方法。例如,在一个公共存储库中维护代码并创建 Rails 引擎。

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

    例如:

    • Spree::Core - spree_core 引擎作为一个 gem 来维护所有模型和基础模块等。
    • Spree::Backend - spree_backend 引擎作为一个 gem 来维护所有与管理相关的控制器、视图、资产等。
    • Spree::Frontend - spree_frontend 引擎作为一个 gem 来维护面向用户的代码,即与之相关的控制器、视图、资产。

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

    【讨论】:

    • 感谢您提及 Spree。我正在分叉代码以将其用作项目的参考。
    • 当然,我还鼓励您查看 Rails 代码库。它将帮助您了解框架架构和技巧。 :)
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-03-10
      • 2021-09-07
      • 2023-03-04
      • 2023-03-11
      • 2016-04-24
      • 1970-01-01
      • 2015-07-21
      • 2011-06-06
      • 1970-01-01
      相关资源
      最近更新 更多