bundler:不支持在使​​用系统 gem 时使用自定义路径

Posted

技术标签:

【中文标题】bundler:不支持在使​​用系统 gem 时使用自定义路径【英文标题】:bundler: Using a custom path while using system gems is unsupported 【发布时间】:2019-11-22 03:38:01 【问题描述】:

我正在使用GitLab-CI/CD 构建我的Rails 应用程序。我注意到由于Using a custom path while using system gems is unsupported 错误,我的构建失败了,之前它工作得很好。

尝试检查较新的更新版本,但未发现任何问题。有没有人对提到的问题的最新更新或某些东西有任何想法?

下面是我的gitlab-ci.yml

variables:
  GIT_SUBMODULE_STRATEGY: recursive

cache:
  key: $CI_JOB_NAME
  paths:
    - vendor/ruby

before_script:
    - apt-get update -qq
    - ruby -v
    - which ruby
    - gem --version
    - git --version
    - gem update --system 2.7.6
    - gem install bundler -v 2.0.1
    - bundle -v
    - bundle config $REPO_URL $BUNDLE_GITLAB__TOKEN
    - bundle config --global disable_shared_gems true
    - bundle install --jobs $(nproc)  "$FLAGS[@]" --path vendor 

rubocop:
  tags:
    - rubocop
  script:
    - bundle exec rubocop

# rspec:
#   stage: test
#   script:
#     - bundle exec rspec

下面是我遇到的简短错误

$ apt-get update -qq
$ ruby -v
ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-linux]
$ which ruby
/usr/local/bin/ruby
$ gem --version
3.0.3
$ git --version
git version 2.20.1
$ gem update --system 2.7.6
Updating rubygems-update
Successfully installed rubygems-update-2.7.6
Installing RubyGems 2.7.6
Bundler 1.16.1 installed
RubyGems 2.7.6 installed
Regenerating binstubs



------------------------------------------------------------------------------

RubyGems installed the following executables:
    /usr/local/bin/gem
    /usr/local/bin/bundle

RubyGems system software updated
$ gem install bundler -v 2.0.1
Successfully installed bundler-2.0.1
1 gem installed
$ bundle -v
Bundler version 2.0.1
$ bundle config https://gitlab.com/dharshannn/test-star.git $BUNDLE_GITLAB__TOKEN
$ bundle config --global disable_shared_gems true
$ bundle install --jobs $(nproc)  "$FLAGS[@]" --path vendor
Using a custom path while using system gems is unsupported.

path:
Set for your local app (/usr/local/bundle/config): "vendor"

path.system:
Set via BUNDLE_PATH__SYSTEM: true

disable_shared_gems:
Set for the current user (/root/.bundle/config): true
ERROR: Job failed: exit code 1

【问题讨论】:

从今天开始遇到完全相同的问题。我的 CI-config 文件不包含添加的捆绑配置语句 bundle config --global disable_shared_gems true。如果将其删除,CI 将失败并显示以下消息。 You have not configured a value for `disable_shared_gems` 刚刚昨晚也在 Gitlab 上开始发生在我们身上,我们的系统没有任何变化。有谁知道为什么会发生这种情况? 在官方ruby 镜像的Dockerfile 中,BUNDLE_PATH__SYSTEM=true 看起来是added recently。更改has been reverted,但似乎没有图像已通过此修复重建和发布。 【参考方案1】:

今天我也遇到了同样的情况。我很确定bundlergem 没有更新。然而,Docker 镜像已经更新(我使用的是ruby:2.6.3)。当这种情况开始发生时,我还添加了一个新的依赖项,所以我怀疑它依赖于一个已经安装在系统路径中的 gem,因此出现了错误消息。

您可以通过在 .gitlab-ci.yml 中指定以下配置变量来绕过它:

variables:
  BUNDLE_DISABLE_SHARED_GEMS: "true"
  BUNDLE_PATH__SYSTEM: "false"

这会将 Bundler 配置为不使用共享 gem 并完全禁用系统 gem。

见https://bundler.io/v2.0/bundle_config.html

disable_shared_gems (BUNDLE_DISABLE_SHARED_GEMS):阻止 Bundler 访问安装到 RubyGems 正常位置的 gem。

path.system (BUNDLE_PATH__SYSTEM):Bundler 是否会将 gem 安装到默认系统路径(Gem.dir)中。

【讨论】:

谢谢。值得注意的是,我使用 Drone,并在我的管道中的 environment 设置中添加了这些,现在我回到了非失败构建。

以上是关于bundler:不支持在使​​用系统 gem 时使用自定义路径的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Bundler 添加 gem

Bundler:创建Gem - 默认联系信息源?

没有 sudo,Bundler 无法安装任何 gem

使用bundler时如何在Gemfile中使用gem?

如何强制 Bundler 重新安装我的所有 gem?

pg gem 安装错误 - lion osx、bundler 和 rvm