Breaking a large rails app into smaller apps?
Modularizing Rails applications
Best practice for structuring a 'large' Rails app
我在一个大型Ruby on Rails应用程序中有一个关于模块化的快速问题。
设置:
我正在构建一个存储人员信息的核心应用程序。我还有几个“模块”以非常不同的方式使用这些信息。 (例如,一个人可以显示关于人的信息,另一个人可以找出他们之间的联系和共性等)。
问题:
如何有效地模块化这个应用程序?
潜在的答案:
由于模块与核心应用程序(以及彼此)共享模型和视图,因此我将它们组合到一个应用程序中是有意义的。但是,随着应用程序的增长,这显然会导致问题。这对我来说建议命名空间控制器和模型“How to organize controller in moderately large Rails application?”或使用引擎“Modularizing Rails applications”。
由于模块处于主动开发状态,因此在它们上使用轨道生成器非常有用,这似乎使得使用引擎时很痛苦。看起来虽然从Rails的角度来看完全支持引擎,但在缺乏生成器支持和数据库迁移方面,它们似乎仍然相当hacky。有没有人有成功开发引擎的经验?如果你有一个工作的应用程序想要将它移植到一个插件(即复制粘贴代码),似乎引擎将是一个很好的解决方案,但如果你正在积极开发它(更改模型等),这将是困难的。
我看到的最后一件事是使用多个应用程序和一个数据库。这种方式看起来像皇家的痛苦与迁移和保持模型等等。但我想我也会对此有所了解。
答案 0 :(得分:1)
Rails引擎似乎是适合您的正确解决方案。当我使用Refinery CMS时,我使用了引擎,它建立在Rails引擎之上。
以下是一些很好的链接,它们讨论了Rails Engines:
http://www.themodestrubyist.com/2010/03/01/rails-3-plugins---part-1---the-big-picture/
http://www.themodestrubyist.com/2010/03/05/rails-3-plugins---part-2---writing-an-engine/
http://www.themodestrubyist.com/2010/03/22/rails-3-plugins---part-4---more-on-generators/
答案 1 :(得分:1)
我不会使用引擎。引擎用于在应用程序之间共享功能。你想要做的不是分享功能,而是组织它。
为了整理你的代码,你可以做很多事情。
Andrzej有很多关于DCI的文章。
http://andrzejonsoftware.blogspot.com/2011/08/dci-patterns-how-to-write-dci-contexts.html
答案 2 :(得分:0)
答案 3 :(得分:0)
您还可以使用Rack Middleware来处理特定任务。
对于您的大部分应用程序,Engines似乎是最好的解决方案 - 这也是我正在考虑的事情。看起来您可以轻松地在引擎中define generators。
答案 4 :(得分:0)
根据数据的结构和访问模式,将应用程序分成多个应用程序可能很有用,另外,还可以通过(RESTful)API提供数据访问。
根据我的经验,当您的应用程序从中型到大型增长时,这可以实现最佳结构,并迫使您考虑结构和关注点分离。扩大规模通常也更容易。