我想开发一些非平凡的Rails应用程序,它们都实现了一组核心功能,但每个都有一些特定的自定义,扩展和美学差异。如何以这样的方式提取所有这些系统共有的核心功能(模型,控制器,帮助程序,支持类,测试),以便更新核心将使基于它的每个应用程序受益?
我见过Rails Engines但是它们似乎太过分离,几乎太抽象而无法构建。我认为它们对于向现有应用程序添加一个组件非常有用,例如将博客引擎固定到现有的电子商务站点。由于引擎似乎主要是自包含的,因此在保持DRY的同时覆盖其功能和视图似乎很困难且不方便。
我还考虑将代码抽象为gem,但这看起来有点奇怪。我是否依赖于Rails宝石和定义模型&它内部的控制器,然后在我的各种应用程序中将它们子类化?或者我在我的各种应用程序中的不同位置包含的gem中定义了许多模块?如何测试gem,然后测试一组自定义和覆盖的功能?我也关注如何同时开发gem和Rails应用程序,我可以在应用程序中提供gem的git存储库并从中推送,这样我就不必每次迭代都构建一个新的gem吗?此外,是否有私人宝石主机/我可以设置自己的宝石来源吗?
此外,对此类承诺的一般建议是什么?抽象范式坚持?要求阅读?以前做过这个的明智者的评论?谢谢!
答案 0 :(得分:1)