ruby-on-rails-3 - 如何组织 Rails App 和多引擎的开发

标签 ruby-on-rails-3 git bundler rails-engines

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

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

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

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

特别是我希望能够:

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

我已经想到的:

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

那么你们中有人有类似的设置吗?您如何管理它以尽可能轻松地更新和提交更改?您将应用程序所依赖的 Engine/Gem 代码放在哪里?

TL;DR如何管理包含多个引擎和 Gem 的大型 Rails 项目?

最佳答案

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

将您的 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 脚本(只是为了启动各种克隆或更新操作,以及 bundle 安装,以便一切都干净利落),然后将其提交到主应用程序。我还会在团队中建立一个“标准文件夹组织”(即,每个人都使用他们选择的基本文件夹,在它下面有 Rails 应用程序和每个 gem 的文件夹),以使过程更容易。

我希望这可以帮助或启发您的想法(您的问题非常复杂和多方面,所以我不能 100% 确定这就是您要找的东西)。

关于ruby-on-rails-3 - 如何组织 Rails App 和多引擎的开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13712717/

相关文章:

git - 当没有来源时 "git push"推送到哪个远程?

javascript - 使用 Webpack 时努力删除 FOUC(Flash Of Unstyled Content)

ruby-on-rails - 不同分支的不同gem版本

ruby-on-rails - 从固定装置切换到工厂女孩

ruby-on-rails - 为什么我得到 "The action ' 索引'找不到 PeopleController”?

ruby-on-rails-3 - collection_select 方法在 Rails 3.1.1 中给出错误

ruby-on-rails - Bundler 找不到 gem "bundler": 的兼容版本

ruby-on-rails - 为什么默认情况下我的 Rails 应用程序的 .gitignore 文件中包含 config/database.yml?

git - 修复 git 双重提交历史

c# - 与 Libgit2 相比,Windows 上的 Git stash 极其缓慢