【问题标题】:Bundler: using shared gem when it exists, rather than downloading from gem serverBundler:当它存在时使用共享gem,而不是从gem服务器下载
【发布时间】:2015-01-21 04:08:40
【问题描述】:

说,我有像下面这样的 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 执行以下操作。

  1. 如果“本地系统范围的 gem”中已经存在 gem,它会从本地复制 gem。

  2. 如果本地不存在 gem,它会查找 GEM_REPOSITORY。

我查找了一些相关文章,并找到了一些可能的答案,例如

但以上都不是我的答案。 使用源存储库优先级不起作用。因为在上面的示例中,如果依赖的 gem(例如,gem_B_1)在本地退出,但目标 gem(gem_B)在本地不存在,它将从远程存储库下载以上两者。

有什么办法可以解决这个问题吗? 如果没有,考虑到实施成本和效果,你们不觉得有必要吗?

【问题讨论】:

    标签: ruby gem rubygems bundler gemfile


    【解决方案1】:

    这是当前行为。 当直接运行gem install 或通过bundle install 运行gem 时,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 依赖并运行 bundle install。

    cd ../gem_b
    vim Gemfile
    

    并添加

    gem 'gem_a', path: '../gem_a'
    

    然后运行

    bundle install --verbose
    

    您将看到multi_jsongem_a 的任何依赖项使用本地版本并且不下载任何内容。

    这当然也适用于来自远程来源的宝石。

    【讨论】:

    • 看来是我误会了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2013-03-26
    • 1970-01-01
    • 2011-04-20
    • 2016-07-11
    相关资源
    最近更新 更多