如何使用相同的代码库管理多个Rails 2.3网站的差异

时间:2011-10-31 10:43:32

标签: ruby-on-rails git configuration nginx

我们有一个使用Rails 2.3.x,bundler,nginx,passenger和git的网站,现在想使用相同的代码来部署一个非常相似的网站。两者之间的差异将包括:

  • 区域设置
  • 数据库
  • 在某些情况下的验证
  • 在某些情况下查看

使用相同代码库时管理这些差异的最佳方法是什么?

我们有过一些想法:

  • 创建新的Rails环境,例如 production-a production-b ,并处理相应环境文件中的差异。一个潜在的问题是许多宝石和插件都是硬编码的,以寻找生产开发环境。

  • 使用Passenger设置全局变量或使用每个请求的域来确定要使用的上下文。这个问题是无法访问此状态的rake任务,cron作业等。

  • 维护两个版本的config目录。这将不方便维护所有配置文件的2个版本,其中许多将是相同的。此外,我现在确定如何利用git正确地执行此操作。

任何想法,提示或示例都将不胜感激! Question #6753275是相关的,但似乎不完整。

1 个答案:

答案 0 :(得分:2)

我在rails 2.3.x项目中使用的一个解决方案是将整个站点转换为engine。这实际上非常简单,在vendor\plugins\下创建一个文件夹并将所有app内容移到那里。您可以看到rails 2.3 here的解释。

如果需要,您甚至可以移动所有迁移和东西,并使用rake任务 运行那些。

然后可以使用引擎将所有需要推翻的内容放入实际的rails项目中。因此,您将拥有两个rails项目,具有自己的配置,区域设置和一些本地覆盖,以及一个大的共享插件/引擎。

我们使用git submodules来保持代码在不同项目中保持同步。

在轨道3中,这更容易,因为引擎现在可以只是一个宝石。

希望这有帮助。