Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何抽象出几个Rails应用程序的核心功能?_Ruby On Rails_Ruby_Rubygems_Abstraction - Fatal编程技术网

Ruby on rails 如何抽象出几个Rails应用程序的核心功能?

Ruby on rails 如何抽象出几个Rails应用程序的核心功能?,ruby-on-rails,ruby,rubygems,abstraction,Ruby On Rails,Ruby,Rubygems,Abstraction,我想开发一些非平凡的Rails应用程序,它们都实现了一组核心功能,但每个都有特定的定制、扩展和审美差异。我如何才能将所有这些系统共有的核心功能(模型、控制器、助手、支持类、测试)提取出来,从而更新核心将使基于它的每个应用程序受益 我见过Rails引擎,但它们似乎过于独立,几乎过于抽象,无法构建。我可以认为它们对于向现有应用程序添加一个组件非常有用,例如,将博客引擎连接到现有的电子商务站点。由于引擎似乎大多是独立的,所以在保持干燥的同时覆盖其功能和视图似乎很困难,也很不方便 我也考虑过将代码抽象成

我想开发一些非平凡的Rails应用程序,它们都实现了一组核心功能,但每个都有特定的定制、扩展和审美差异。我如何才能将所有这些系统共有的核心功能(模型、控制器、助手、支持类、测试)提取出来,从而更新核心将使基于它的每个应用程序受益

我见过Rails引擎,但它们似乎过于独立,几乎过于抽象,无法构建。我可以认为它们对于向现有应用程序添加一个组件非常有用,例如,将博客引擎连接到现有的电子商务站点。由于引擎似乎大多是独立的,所以在保持干燥的同时覆盖其功能和视图似乎很困难,也很不方便

我也考虑过将代码抽象成gem,但这似乎有点奇怪。我是否让gem依赖于Rails gem以及其中的定义模型和控制器,然后在我的各种应用程序中对它们进行子类化?或者我在gem中定义了许多模块,这些模块包含在我的各种应用程序的不同点中?如何测试gem,然后在其上测试定制集和覆盖的功能?我还关心如何同时开发gem和Rails应用程序,我是否可以在应用程序中提供gem的git存储库,并从中推动,这样我就不必每次迭代都构建一个新的gem?还有,是否有私有的gem主机/我可以设置自己的gem源代码


还有,对这种承诺有什么一般性的建议吗?要坚持的抽象范式?必读?曾经这样做过的智者的评论?谢谢

从未做过这样的事情,但我想Rails插件应该是合适的地方:

之后,您可以从中创建宝石:


你能试着解释一下我如何在应用程序中重新打开插件中定义的类(如果无法重新打开,则重新打开子类)吗?我的主要问题是在插件和应用程序之间共享代码,比如说插件中定义了模型的正常行为,但应用程序只覆盖了一些方法。如果我在应用程序中定义模型,Rails会首先查找该模型,找到它要查找的类,然后定义缺少的常量。Rails从不在插件中查找,这意味着我的核心功能都无法实现。