从相同的rails代码库运行多个站点?

nic*_*des 21 ruby-on-rails codebase

我有一个客户想要把他们的Rails应用程序在一个利基中成功并将其应用到另一个类似的利基市场.这个应用程序的新实例将开始非常相似:所有相同的功能,不同的徽标和颜色.但是,如果新网站成功,则不可避免地需要进行大量自定义,而这些自定义不应该应用于原始网站.同时,如果修复了错误并对一个应用程序进行了改进,那么这两个应用程序应该能够共享这些改进.

任何人都可以提出解决此问题的策略或资源吗?如何保持适用于这两个应用的更改花费更长时间来测试和实施?

是的,我知道答案涉及SCM,插件,宝石和Rails引擎.这些工具将被使用.但我想知道何时以及如何使用这些工具来解决这个问题.

也欢迎链接.


这个问题与以下不一样:

多个网站在相同的代码库上运行? 在我的问题中,我没有使用不同的设置运行完全相同的应用程序.

如何在多个代码库之间同步更改?我问了一个类似的问题,但我特别询问Rails应用程序.

Ale*_*yra 29

我们目前使用的设置与您描述的设置非常相似.

我们开始为客户开发一个有点大的Rails应用程序(销售,库存管理,产品目录等).完成后,出现了几个几乎相同功能的新请求.

然而,原始应用程序必须继续维护,添加新功能,纠正错误和诸如此类的东西.

扩展的功能需要保持大多数功能,但需要改变外观和外观.

我们所做的是遵循一系列步骤:

  1. 首先,我们开始清理代码,将硬编码引用拉到表,减少和优化查询,查找缺少的索引以及改进ActiveRecord使用的方法
  2. 在有些满意之后,我们开始开发缺失的测试.我不能强调为什么它有用,因为我们将为几个应用程序维护相同的代码库,并且需要核心功能受到保护,因为它可以来自新的更改.
  3. 这也是一个神奇的词:核心功能.我们开始选择可以重用的基本功能,并提供所有通用代码.这给了我们混合的控制器,模型和视图,我们开始将其转换为模块,插件和宝石.怎么回事?很大程度上取决于您的代码.根据经验,不涉及域语言的功能适用于插件(如果它不太依赖于Rails,则为宝石)
    1. 这种方法使我们得到了几个插件,宝石,然后我们将它们组合在一起重新组装原始项目,然后它就到了它自己的GIT存储库.这样,我们就有了一个主要的"模板"存储库,它为每个组件粘合了所有组件和其他几个GIT存储库.
    2. 最后,我们开发了一个简单的主题系统(基本上是加载/ stylesheets/themes /:theme_name /并从数据库中获取theme_name).由于它是一个内部网项目,我们几乎可以使用适当的CSS样式做任何事情.我想与IE合作你需要一个更复杂的方法.
    3. 然后,我们刚刚使用该主存储库开发新功能.

现在,我们如何处理核心基础的变化.我们从模板库开始.我们修复或定义修复或更改应该在哪里,并在那里或在相应的gem /插件上更改它.在对其进行适当测试后,我们将其部署到我们的GitHub帐户.

最后,我们合并/重新绑定该模板存储库中的其他项目,获取新的更新.

听起来有点复杂,但它只适用于设置.当前的工作流程非常简单,具有与多个开发人员合作而没有更大问题的优势.