我们在大多数Web项目中使用Rails,并且在许多情况下,我们共享依赖的代码,例如Gems API。我们也有一些性质相似的项目,我们已经构建了Engines,然后有了使用这些项目的宿主应用程序。
这些都托管在我们自己的服务器上,并且我们使用“盒子中的宝石”与项目共享Gems(这是因为由于安全限制,我们无法将Gems上传到其他任何地方)。在开发过程中,我们注释掉了行,以引用服务器上的特定版本,或者如果我们在Gem内进行开发,则引用本地版本。
例如:
# version on the server
gem 'our_gem', '1.1.0', source: 'https://gems.domain.net'
# local version
gem 'our_gem', path: '../our_gem'
发生的事情是,当我们在CI服务器上进行构建时,我们有了一个脚本,该脚本会读取Gemfile,并找到所有以我们的服务器为源的gem,然后将它们供应商并引用它们作为供应商路径。 / p>
例如:
# this
gem 'our_gem', '1.1.0', source: 'https://gems.domain.net'
# becomes this
gem 'our_gem', path: 'vendor/gems/our_gem-1.1.0'
无论如何,我们遇到的问题是,当我们处于开发阶段并且可能具有多个功能或错误时,我们希望推送给我们的质量检查团队以开始测试,这意味着我们每次都必须修改版本,以便我们可以对其进行引用在我们的Gemfile中作为依赖项。由于我们的构建设置无法访问Git存储库以及其他一些限制,因此我们无法引用该分支。
团队通常如何处理尚无版本的开发中依赖项?我们已经考虑过要开发Gem In A Box的开发版本,然后不在我们的Gemfile中传递版本给它...
# shared dev version of gem on our dev gem server
gem 'our_gem', source: 'https://dev.gems.domain.net'
但是这里的问题是我们仍然需要每次都升级版本才能推送到Gem Server。有没有一种标准的方法可以将软件包推送到Package Manager,从而使版本始终相同(或者更好的是,没有版本,但由Manager托管)?
NPM也有相同的问题(我们运行的是Vedaccio的本地版本)。