我们有一个使用Rails 2.3.x,bundler,nginx,passenger和git的网站,现在想使用相同的代码来部署一个非常相似的网站。两者之间的差异将包括:
使用相同代码库时管理这些差异的最佳方法是什么?
我们有过一些想法:
创建新的Rails环境,例如 production-a 和 production-b ,并处理相应环境文件中的差异。一个潜在的问题是许多宝石和插件都是硬编码的,以寻找生产或开发环境。
使用Passenger设置全局变量或使用每个请求的域来确定要使用的上下文。这个问题是无法访问此状态的rake任务,cron作业等。
维护两个版本的config目录。这将不方便维护所有配置文件的2个版本,其中许多将是相同的。此外,我现在确定如何利用git正确地执行此操作。
任何想法,提示或示例都将不胜感激! Question #6753275是相关的,但似乎不完整。
答案 0 :(得分:2)
我在rails 2.3.x项目中使用的一个解决方案是将整个站点转换为engine
。这实际上非常简单,在vendor\plugins\
下创建一个文件夹并将所有app
内容移到那里。您可以看到rails 2.3 here的解释。
如果需要,您甚至可以移动所有迁移和东西,并使用rake任务 运行那些。
然后可以使用引擎将所有需要推翻的内容放入实际的rails项目中。因此,您将拥有两个rails项目,具有自己的配置,区域设置和一些本地覆盖,以及一个大的共享插件/引擎。
我们使用git submodules
来保持代码在不同项目中保持同步。
在轨道3中,这更容易,因为引擎现在可以只是一个宝石。
希望这有帮助。