【问题标题】:Why bundler doesn't use system gems?为什么捆绑器不使用系统宝石?
【发布时间】:2021-12-22 22:39:12
【问题描述】:

捆绑器版本:1.15.1。 Ruby 版本:2.3.1。 我有(来自gem env):

  - GEM PATHS:
     - /var/lib/gems/2.3.0
     - /root/.gem/ruby/2.3.0
     - /usr/lib/x86_64-linux-gnu/rubygems-integration/2.3.0
     - /usr/share/rubygems-integration/2.3.0
     - /usr/share/rubygems-integration/all

Gemfile.lock 中的所有 gem 都在 /var/lib/gems/2.3.0 下。但是 bundler 不会尝试重复使用这些,而是​​会尝试每次重新下载。

我的.bundle/config

    ---
    BUNDLE_PATH: "vendor/bundle"
    BUNDLE_BIN: "vendor/bin"
    BUNDLE_DISABLE_SHARED_GEMS: "true" <--- removing this config entry doesn't help

运行 bundle install 只是重新下载 gem 而不是说“正在使用”,所以需要很长时间。

哪些设置可能导致此问题以及如何使捆绑程序从系统路径 /var/lib/gems/2.3.0 获取 gem?

我已完整阅读了 bundle 和 bundle install 文档,但不知道如何让 bundler 使用系统 gem。除了在生成索引后使用source 'file:///var/lib/gems/2.3.0' 之外,我真的很想避免这种情况并使用更优雅的解决方案。特别是因为它可能会导致重新安装 gems,这比重新下载需要更多的时间。

【问题讨论】:

    标签: ruby bundler


    【解决方案1】:

    您已将BUNDLE_DISABLE_SHARED_GEMS 设置为true。此设置指示捆绑程序专门忽略任何系统安装的 gem。相反,bundler 会将所有必需的 gem 下载到您的 BUNDLE_PATH

    如果您想在适当的情况下使用系统安装的 gem,请从您的包配置中删除 BUNDLE_DISABLE_SHARED_GEMS 设置。

    【讨论】:

    • 直到现在我才注意到,删除这个条目后,它会自动重新出现!因此,当我从文件中删除它时,在运行 bundle install 时,它会立即添加到文件中。
    • 现在明白了。 bundle install 将在不将 gem 安装到系统路径时执行此操作(因此 BUNDLE_PATHBUNDLE_BIN 设置)。我将停止评论我对此的看法。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2015-07-17
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多