4

实际上很难提出这个问题,所以我只是解释一下情况。

我正在开发一个由多个子应用程序组成的应用程序。主应用程序仅提供导航栏和一些基本功能,例如用户和权限配置,而子应用程序提供实际功能。

现在这是一个 Rails 2 应用程序,子应用程序嵌入到框架中,它的设计不是很好,设置也很复杂。幸运的是,我们现在有了引擎,这将是这个应用程序的更明智的解决方案。

到目前为止,一切都存在于颠覆中,并且可以立即更新,共享代码使用外部代码。我们想在重组和重构时迁移到 git。过去几天我一直在网上搜索有关捆绑程序、git 子模块和 git 子树的信息,但我没有找到一个很好的描述,当您在所有这些上进行开发时如何正确管理由多个引擎/宝石组成的大型项目同时。

我特别希望能够:

  • 使用 Bundler 管理依赖项
  • 不要将我们自己的 Gems 和 Engines 安装到全局 gem 路径中,而是相对于主应用程序,作为 git 存储库
  • 将我们自己的 Gems 和 Engines 设置为 git 存储库(可能使用 Bundler 的本地路径覆盖)
  • 一种获取所有依赖项(捆绑安装)的简单方法,它可以提取我们自己的 Gems 和 Engines 的最新版本,如果这不可能,那么一个命令可以 git pull 所有自己的 Gems 和 Engines(可能是一个 rake 任务?)
  • 使新开发人员可以轻松快速地设置整个开发环境(git 克隆应用程序,在本地捆绑安装依赖项,包括所有自己的 Gem 和引擎)
  • 使用 Capistrano 轻松部署

我已经想到的:

  • 将所有内容都包含在一个存储库中,这似乎违背了对我来说单独的 Gems/Engines 的目的,而且我认为它不允许我们通过 Bundler 管理主应用程序对引擎的依赖关系
  • 使用子模块,我读了太多关于为什么它不好的帖子,并且对于我们的开发人员数量来说,有人提交一个子模块指针指向只存在于他的本地仓库中的提交只是时间问题
  • git subtree 实用程序,对我来说似乎很复杂

那么你们中是否有人有类似的设置,你如何管理它以使更新和提交更改尽可能容易?您将应用程序所依赖的引擎/宝石代码放在哪里?

TL;DR如何管理由多个引擎和宝石组成的大型轨道项目?

4

2 回答 2

4

我们公司有一个类似(但可能不太复杂)的案例。我们所做的(就目前而言)也对您有用:

将您的 Rails 应用程序放在自己的 git 存储库中。各种 gem 也都有自己的存储库(虽然可以不这样做,但“一个 gem = 一个 git 存储库”将使您的生活更轻松)。

然后在你的 Rails 应用程序 Gemfile 中,你有几个选项

  • 默认应该是将每个 gem 引用到它的 git 存储库(以便 bundle 将从那里加载它们)
  • 在本地处理某些 gem 和 Rails 应用程序时,要么将 Gemfile 更改为使用本地路径 ( http://gembundler.com/v1.2/gemfile.html ),要么通过在本地覆盖路径来更好地使用 (参见:http://gembundler.com/v1.2/git.html)。请注意这两个选项是不同的:第一个使用路径,第二个使用本地 git 存储库(因此第一个可以看到新的未提交更改,而不是第二个)。

为了轻松更新您的所有 gem,我将创建一个小的 .sh 脚本(只是为了启动各种克隆或更新操作,以及捆绑安装,以便一切都变得干净),然后使用主应用程序提交它。我还将在团队中建立一个“标准文件夹组织”(即,每个人都使用他们选择的基本文件夹,在其下有 Rails 应用程序和每个 gem 的文件夹),以使过程更容易。

我希望这可以帮助或得到你的想法(你的问题非常复杂和多方面,所以我不是 100% 确定这是你正在寻找的)。

于 2013-02-15T07:56:36.197 回答
1

如何管理您的 Gem 依赖项?
通过 Gemfile 打包。

如何管理您的引擎?
通过 Gemfile 打包。
将您的引擎构建为 Gem,并在您的 Gemfile 中提供它们的 git 存储库位置。如果您需要示例,请查看如何在您的 Gemfile中包含https://github.com/radar/forem gem。

此外,这还帮助我学习了 Rails 引擎,http ://edgeguides.rubyonrails.org/engines.html 。

你是从爪哇岛来的吗?
Rails 确实有学习曲线,但不像 Java 山崖下落。

于 2012-12-11T07:59:41.987 回答