【发布时间】:2014-06-11 04:34:43
【问题描述】:
我正在用 Ruby 开发一个应用程序。它最初是一个小型命令行实用程序,但现在变得相当大,基本上包含三个不同的应用程序:一个命令行实用程序、一个 Sinatra Web 服务器和另一个公开 RESTful Web API 的服务器,所有这三个都依赖于数据库来执行各种操作相同数据的不同事物。
在 Yehuda Katz 的 this great article 之后,我正在使用 bundler 管理我的所有依赖项,并将我的 Gemfile.lock 提交到源代码控制中。我依赖于许多第三方依赖项,并且对于一些我确实关心特定版本(因为已知问题)。
现在,应用程序的所有三个部分都使用一些通用的基础架构代码:主要是用于与数据库通信的数据访问层,以及一两个其他通用类。但除此之外,它们可以被视为单独的应用程序。 如果这是其他语言,比如 Java,我可能会将其拆分为三个应用程序,然后将通用 DAL 代码放在所有三个应用程序都引用的类库中。
在 Ruby 中,我知道应该使用 gems 来打包代码库。 所以我正在考虑为应用程序创建三个 gem,并使用公共库代码创建第四个 gem。或者可能是三个“非 gem”应用程序,都依赖于一个共同的 gem。
问题是,我不确定如何以这种方式管理第三方依赖项。在上述文章中,YK 指出,对于 gem 开发,Gemfile.lock 应该不添加到源代码控制中。 就我而言,我确实需要我正在使用的一些第三方 gem 的特定版本,并且 Gemfile.lock 在最近的初始部署中非常重要。 另外,我不打算发布这些 gem,因为它不是开源项目。 我只需要一种干净的方式来管理我的依赖项,包括第三方 gem 和内部。
所以...
- 我应该创建四个不同的宝石吗?
- 我是否应该将其拆分为三个应用程序,所有应用程序都依赖于我将创建的一个通用 gem?
- Gemfile.lock 怎么样?将其保留在源代码管理中是明智之举,为什么?
- 如果不打算发布的话,开发一个 gem 和一个普通的应用程序有什么缺点或优势吗?
我很想听听经验丰富的 Ruby 专家关于如何做到这一点的一些建议和意见...
谢谢。
【问题讨论】: