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】:
今天我也遇到了同样的情况。我很确定bundler
或gem
没有更新。然而,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 时使用自定义路径的主要内容,如果未能解决你的问题,请参考以下文章