如何构建可自定义的Rails应用程序?

时间:2011-11-25 16:57:06

标签: ruby-on-rails ruby-on-rails-3 git customization

作为一个学习项目,我正在为我所在的功夫俱乐部开发一个Rails 3.1的论坛应用程序。我想在Github上管理我的代码,所以俱乐部或其他任何人都可以使用它。我们的想法是在Github上放置一个“普通”,可自定义的版本,但在另一个更私密的git存储库中管理自定义,例如不同的样式或不同的登录方案。

使Rails应用程序可自定义的最佳方法是什么?这些自定义可能包括:CSS代码,Javascript代码,HTML视图,种子数据(例如,我的俱乐部中的用户组),完整的附加视图或覆盖单一视图方法。理想情况下,自定义位于单独的目录中,因此它们也可以单独放在git存储库中。

以下是我想到的一些方法:

  • 两个存储库,一个是具有自定义功能的另一个存储库(缺点:在prod服务器上进行简单更新的许多git操作,容易出错,因为相同的代码存在两次)
  • CSS,JS等的单独解决方案:将所有修改放在目录custom中(使用第二个私有仓库进行管理,可以作为git子模块安装),其内容通过{{1等等,但路由,视图和控制器呢?
  • 我还不知道的Rails方式 - 可能是这样的:将我的应用程序开发为gem,然后将这个gem安装到现有应用程序中,然后覆盖我宝石的某些部分?我看了spree如何做到这一点,但这对我来说看起来很复杂,对于正在进行的开发来说似乎也不容易。

我感兴趣的是其他人如何处理这个问题以及有什么限制。

编辑:也许我应该将其描述为混合的Rails / Git问题 - 我试图在git存储库(即具有纯灰色背景的论坛)中保留现成的应用程序没有徽标),我希望保留定制版本所需的所有数据和代码,即现成版本的“实例”,根据另一个存储库(体育俱乐部)中的部署域的需求进行定制具有预定义用户组,徽标等的论坛。我希望能够轻松地在这两者之间切换,所以只有在生产站点上部署后才能看到实例网站。

1 个答案:

答案 0 :(得分:1)

Rails方式(至少我对它的理解)是将功能构建为Rails引擎。

关于如何执行此操作的好例子,我会查看RailsAdminDevise等项目。它们绝对是复杂的项目,但它们提供了许多您似乎正在寻找的功能。

例如,

RailsAdmin作为gem安装,提供完整的管理界面,几乎不需要任何配置。当您想要更改其行为时,会有一个初始化文件,允许您传递如何对用户进行身份验证,呈现表单,组模型等。

这种方法很容易应用于论坛,最初只需要告知您的用户模型。其他所有内容都可以在配置中被假设并可选地覆盖。

Devise展示了一种进一步采用配置的方法。有一个Devise生成器将gem的内置视图复制到应用程序的views/文件夹,在这里可以自由修改它们并覆盖gem视图。

但是,既然你提到这是一个学习项目,我建议你不要一次性完成这一切。只需构建一个普通的Rails应用程序,并按照您希望的方式使其运行,即可获得所需的所有功能。一旦完成(并且花费的时间比您想象的要长),您的下一个项目就是将论坛功能提取到可自定义的引擎中。