2011-11-25 64 views
1

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

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

下面是来到我的脑海一些方法:

  • 两个储存库,一个是另一个的与自定义克隆(缺点:为督促服务器,容易出错,因为一个简单的更新许多使用Git操作相同的代码存在两次)
  • 为CSS,JS等提供单独的解决方案:将目录中的所有修改放在custom(使用第二个私人回购管理,可以作为git子模块进行管理),其内容通过*= require_tree my_sports_club/stylesheets等等,但是路线,视图和控制器呢?
  • Rails的路我还不知道 - 也许是这样的:开发我的应用程序作为宝石,然后将这个宝石安装到现有的应用程序,然后覆盖我的宝石的某些部分?我看了一下spree是怎么做到的,但这对我来说看起来相当复杂,而且对于正在进行的开发来说似乎也不太方便。

我很感兴趣,其他人如何解决这个问题以及它的局限性。可能我应该将其描述为一个混合的Rails/Git问题 - 我试图在git存储库中保留一个现成的应用程序(即一个没有标识的普通灰色背景的论坛) ,并且我想保留定制版本所需的所有数据和代码,这是现成版本的“实例”,针对另一个存储库中部署域的需求量身定制(体育俱乐部论坛,定义的用户组,标识等)。而且我希望能够轻松地在这两者之间切换,因此我只能在生产站点上部署实例网站后才能看到实例网站。

+0

Rails已经*可*定制。如果你想要一个CMS,你可以通过基于网络的GUI进行更改,请使用WordPress。这不是Rails的。 – meagar

+0

@meagar:我不是在谈论用于定制的用户界面。你有没有读过我的问题? – fqxp

+0

从谁的角度定制?你想要一组固定的宝石,还是可以开放定制? – prusswan

回答

1

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

关于如何做到这一点的好例子,我会看看像RailsAdminDevise这样的项目。它们绝对是复杂的项目,但它们提供了许多您似乎在寻找的功能。

例如,RailsAdmin作为gem安装,并提供完整的管理界面,几乎不需要配置。当你想改变它的行为时,有一个初始化文件,它允许你传递如何验证用户,渲染表单,组模型等。

这种方法可以很容易地应用到论坛,最初真的会只需告诉你的用户模型。其他一切都可以在配置中假定并可选地覆盖。

设计显示了进一步配置的方法。有一个Devise生成器,将创建的视图复制到应用程序的views/文件夹中,在该文件夹中可以自由修改并覆盖宝石视图。

既然你提到这是一个学习项目,但是,我不建议你一下子加入。只需构建一个普通的Rails应用程序,并按照您希望的方式使用所需的所有功能。一旦你完成了这个任务(这需要比你想象的更长的时间),你的下一个项目可以将论坛功能提取到一个可定制的引擎中。

+0

针对Rails引擎的建议和其他项目的指针。这实际上回答了我在一个月左右要问的几个问题:)。我仍然希望得到更好的答案,这就是为什么我现在不接受这个答案。 – fqxp

+0

这是一个奇怪的问题。您希望能够使用通用版本和自定义版本部署单个应用程序,每个版本都在git中单独管理?并在应用程序运行时在两个版本之间切换? – Luke

+0

不可以。“可定制”一词由于人们对此的关联而被严重选择。我不想切换。我希望为公众提供一个版本(在github上),并为特定的原因提供一个“实例”(不在github上,因为它包含徽标等)。我只是更好地学习了git,而现在我将这样做的方式仅仅是作为一个拥有自定义功能的分支,我从未回归主分支。 – fqxp