Bundler:在共享 gem 存在时使用它,而不是从 gem 服务器下载
Bundler: using shared gem when it exists, rather than downloading from gem server
说,我有如下的 Gemfile。
source "GEM_REPOSITORY"
gem 'gem_A'
# gem_A has no additional dependency
gem 'gem_B'
# gem_B depends on gem_B_1 and gem_B_2
当我 运行 bundle install
时,我希望 Bundler 执行以下操作。
如果 gem 已经存在于 "local system-wide gems",它从本地复制 gem。
如果本地不存在gem,则查找GEM_REPOSITORY.
我查找了一些相关文章,找到了一些可能的答案,例如
- Ruby Bundler multiple sources in Gemfile
- SOURCE PRIORITY
但是上面的 none 看起来像是我的答案。
使用源存储库优先级不起作用。因为在上面的例子中,如果依赖gem(比如gem_B_1
)在本地存在但是目标gem(gem_B
)在本地不存在,它会从远程存储库下载以上两个。
是否有解决此问题的方法?
如果没有,你们不觉得有必要考虑一下实施的成本和效果吗?
这是当前行为。
当 运行ning gem install
时,直接或通过 bundle install
,gem
将首先构建一个包含所有需要的 gem 的依赖关系图。如果在本地找到 gem
它将使用它,否则它将尝试从指定的源下载它。
喜欢就自己试试吧
bundle gem gem_a
bundle gem gem_b
cd gem_a
vim gem_a.gemspec
添加
spec.add_dependency 'multi_json', '~> 1.10.1'
或您想要 gem 和 运行 捆绑包安装的任何依赖项。
cd ../gem_b
vim Gemfile
并添加
gem 'gem_a', path: '../gem_a'
然后 运行
bundle install --verbose
您会看到 multi_json
或 gem_a
的任何依赖项使用本地版本并且不下载任何内容。
这当然也适用于来自远程源的 gems。
说,我有如下的 Gemfile。
source "GEM_REPOSITORY"
gem 'gem_A'
# gem_A has no additional dependency
gem 'gem_B'
# gem_B depends on gem_B_1 and gem_B_2
当我 运行 bundle install
时,我希望 Bundler 执行以下操作。
如果 gem 已经存在于 "local system-wide gems",它从本地复制 gem。
如果本地不存在gem,则查找GEM_REPOSITORY.
我查找了一些相关文章,找到了一些可能的答案,例如
- Ruby Bundler multiple sources in Gemfile
- SOURCE PRIORITY
但是上面的 none 看起来像是我的答案。
使用源存储库优先级不起作用。因为在上面的例子中,如果依赖gem(比如gem_B_1
)在本地存在但是目标gem(gem_B
)在本地不存在,它会从远程存储库下载以上两个。
是否有解决此问题的方法? 如果没有,你们不觉得有必要考虑一下实施的成本和效果吗?
这是当前行为。
当 运行ning gem install
时,直接或通过 bundle install
,gem
将首先构建一个包含所有需要的 gem 的依赖关系图。如果在本地找到 gem
它将使用它,否则它将尝试从指定的源下载它。
喜欢就自己试试吧
bundle gem gem_a
bundle gem gem_b
cd gem_a
vim gem_a.gemspec
添加
spec.add_dependency 'multi_json', '~> 1.10.1'
或您想要 gem 和 运行 捆绑包安装的任何依赖项。
cd ../gem_b
vim Gemfile
并添加
gem 'gem_a', path: '../gem_a'
然后 运行
bundle install --verbose
您会看到 multi_json
或 gem_a
的任何依赖项使用本地版本并且不下载任何内容。
这当然也适用于来自远程源的 gems。