我想使用Rails构建一个可扩展的模块化应用程序,可以配置它以满足一个人的要求。
让我解释一下我在“可扩展”和“模块化”下的理解。例如,假设我正在开发一个博客应用程序引擎,我有一个名为BlogEntry
的模型,它包含一个简单的博客条目通常包含的内容 - 标题和内容。我们假设我希望这个应用程序能够以2种模式运行:
BlogEntry
只有2个属性 - 标题和内容BlogEntry
扩展为具有更多属性时,它会与名为Tag
的单独模型进行多对多关联。我的目标是:
BlogEntry
只是一个简单的独立类,当插入标记功能包括BlogEntry
中的某种增强模块时class,向BlogEntryController
添加一些代码,甚至在blogentry视图中的某些指定位置添加一些输出。因此,如果一个人不想要任何复杂的功能,那么应用程序就会非常简单和基本。如果一个人想要额外的东西,应用程序可以扩展几个插件,因此它不会最终成为一个巨大的应用程序,即所有的一切英国媒体报道。
事实上,这种可插拔功能几乎存在于任何主要的高级Web开发平台中,例如MediaWiki,Moodle,WordPress等。
到目前为止,搜索“模块化轨道”已经产生了:
我敢打赌,有数以万种方法可以实现我所说的。什么是最好的?我在哪里可以看到这种模块化应用的一个很好的例子?
答案 0 :(得分:1)
我认为Rails Engines确实是你想要的。
我已经为几个作为引擎提供的应用程序做出了贡献,基本上可以完成您所描述的内容。这是其中一个主要由我开发的:http://github.com/team-umlaut/umlaut
它并不总是完全直截了当,有很多地方你需要决定如何设置,而Rails文档或明显的约定并不是必须指导你的。我同意(非常有限的)引擎文档并不一定会引导您走这条路。但是发动机足以完成需要做的事情。还要给你足够的绳索来悬挂自己并使事情过于复杂。
我建议使用rails plugin new name_of_engine --full
创建引擎骨架 - 但不 --mountable
。我认为--mountable
过度复杂,没有对这种特殊类型的引擎用例有益。 (其他人可能不同意;是的,关于选择和最佳实践的事情,并不总是清楚这种情况)。
Rails插件基本上已弃用;目前唯一支持的插件是plugins-as-gems - 其中Engine是最强大的(可以与Rails进行大多数交互),你会想要这种东西。
我同意你为什么app模板在这里不够用 - 尽管你可能想提供一个app模板,用你的gemfile中的引擎创建一个应用程序,以及在本地应用程序中生成的任何必要的本地存根。我在umlaut
的最新版本中做到了这一点,但直到最近才开始,它并不是绝对必要的,我会在你至少得到一个基本的概念证明之后离开它。
Rails并不一定会鼓励这一点,但它有可能并且有足够的工作量,并且我同意你的观点是适合某些事情的。