Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何为多个Rails 2.3网站使用相同的代码库管理差异_Ruby On Rails_Git_Configuration_Nginx - Fatal编程技术网

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

Ruby on rails 如何为多个Rails 2.3网站使用相同的代码库管理差异,ruby-on-rails,git,configuration,nginx,Ruby On Rails,Git,Configuration,Nginx,我们有一个使用Rails2.3.x、bundler、nginx、passenger和git的网站,现在希望使用相同的代码部署一个非常类似的网站。两者的区别包括: 地点 数据库 某些情况下的验证 某些情况下的观点 在使用相同的代码库时,管理这些差异的最佳方法是什么? 我们有一些想法: 创建新的Rails环境,例如production-a和production-b,并处理相应环境文件中的差异。一个潜在的问题是,许多gem和插件都是硬编码的,用于寻找生产或开发环境 使用Passenger设置全局

我们有一个使用Rails2.3.x、bundler、nginx、passenger和git的网站,现在希望使用相同的代码部署一个非常类似的网站。两者的区别包括:

  • 地点
  • 数据库
  • 某些情况下的验证
  • 某些情况下的观点
在使用相同的代码库时,管理这些差异的最佳方法是什么?

我们有一些想法:

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

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

  • 维护配置目录的两个版本。这会给维护所有配置文件的两个版本带来不便,其中许多版本是相同的。另外,我现在知道了如何利用git来正确地实现这一点


如有任何想法、提示或示例,将不胜感激!相关,但似乎不完整。

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

如果需要,您甚至可以将所有迁移和其他内容移动到那里,并使用rake任务 运行这些

然后,需要否决的所有内容都可以使用引擎放置在实际的rails项目中。因此,您将拥有两个rails项目,它们有自己的配置、区域设置和一些本地否决权,以及一个大型共享插件/引擎

我们使用
git子模块
在不同的项目中保持代码同步

在Rails3中,这甚至更容易,因为引擎现在只是一块宝石


希望这有帮助。

谢谢,确实有帮助。您是否使用rake+rsync将engine/public中的文件复制到public?我们正在使用Bundler-文件将放在哪里?似乎很多东西最终都会在不同的站点中被复制。好吧,使用引擎作为插件(rails 2.3.x),rails项目中只有一个Gemfile,afaik:。但这只是一个猜测。在bundler出现之前我就这么做了。如果您使用的是gems(Rails3.x),那么每个gem都有自己的Gemfile。我只是手动复制了这些文件。有一些重复,但它也给了你在重要的事情上否决的自由。最重要的是:你消除了主要的重复!您的代码在应用程序之间共享。