如何管理共享代码和配置的多个Rails应用程序和服务?

我有四个Rails应用程序(还有更多)。 他们分享:

  • 样式表
  • JavaScript的
  • 第三方gem
  • 一些相同的ActiveRecord模型
  • 我们自己的ruby图书馆
  • 配置/环境变量

我还有一堆与上面的Rails应用程序交互的rabbitmq服务。

我正在试图找出如何理智地控制所有这些东西。 现在,我在一个巨大的git存储库中拥有所有内容,结构如下:

 /网站/ rails1
 /网站/ rails2
 /网站/ Rails3中
 /服务/服务1
 /服务/服务2
 /服务/服务2
 / lib目录/ our_code
 / lib目录/ common_js
 / lib目录/ common_css
 /配置/ common_configuration_files

这是一种理智的方式吗?

如果我要将所有内容都分解为他们自己的git项目,那么每次更新共享gem / library / css文件(使用gems / bundler或其他)时,似乎很难单独更新每个项目。

在一个项目中拥有所有内容的不幸之处在于我无法在Heroku上轻松放置一个应用程序或服务。

可以在这里使用git子树合并帮助吗? 也许每个站点/服务都是自己的分支?

每个项目一个回购。 共享的东西可以自己的回购。 假设文件结构是常量,您可以使用软文件链接来包含这些目录。 Git将尊重这些软文件链接并检查它们,但不会在项目的repo中包含引用的目录。

拥有一个大型仓库会使您的仓库日志难以遵循,因为您将拥有与项目的语义划分无关的分支(即,进入Rails应用程序)。 当然,如果你想弄清楚特定文件或目录发生了什么,那么所有信息都在那里 ,但你的一般git log --name-status将包含所有项目的信息,这些信息不太理想,而且有点难以过滤掉(没有在git上创建ad-hoc系统)。