Ruby 绑定程序版本在Gemfile.lock存在时不自动切换

Ruby 绑定程序版本在Gemfile.lock存在时不自动切换,ruby,bundler,Ruby,Bundler,升级bundler后,我收到一个错误: You must use Bundler 2 or greater with this lockfile. 我在本地安装了1.17.3版和2.0.2版。我的印象是,根据我所读到的内容,应该根据Gemfile.lock表示的内容自动切换版本。这似乎没有发生 下面是一些关于我的环境的有用信息 # cat Gemfile.lock GEM remote: https://rubygems.org/ specs: domain_name (0.

升级bundler后,我收到一个错误:

You must use Bundler 2 or greater with this lockfile.
我在本地安装了1.17.3版和2.0.2版。我的印象是,根据我所读到的内容,应该根据Gemfile.lock表示的内容自动切换版本。这似乎没有发生

下面是一些关于我的环境的有用信息

# cat Gemfile.lock 
GEM
  remote: https://rubygems.org/
  specs:
    domain_name (0.5.20190701)
      unf (>= 0.0.5, < 1.0.0)
    http-cookie (1.0.3)
      domain_name (~> 0.5)
    mime-types (3.2.2)
      mime-types-data (~> 3.2015)
    mime-types-data (3.2019.0331)
    netrc (0.11.0)
    pp (0.1.1)
    rest-client (2.0.2)
      http-cookie (>= 1.0.2, < 2.0)
      mime-types (>= 1.16, < 4.0)
      netrc (~> 0.8)
    terminal-table (1.8.0)
      unicode-display_width (~> 1.1, >= 1.1.1)
    unf (0.1.4)
      unf_ext
      unf_ext (0.0.7.6)
    unicode-display_width (1.6.0)

PLATFORMS
  ruby

DEPENDENCIES
  pp (~> 0.1.1)
  rest-client (~> 2.0)
  terminal-table (~> 1.8)

BUNDLED WITH
   2.0.2
# bundle install
You must use Bundler 2 or greater with this lockfile.
# gem list | grep bundler
bundler (2.0.2, default: 1.17.3, 1.16.6)
#cat Gemfile.lock
宝石
远程:https://rubygems.org/
规格:
域名(0.5.20190701)
unf(>=0.0.5,<1.0.0)
http cookie(1.0.3)
域名(~>0.5)
mime类型(3.2.2)
mime类型数据(~>3.2015)
mime类型数据(3.2019.0331)
netrc(0.11.0)
pp(0.1.1)
rest客户端(2.0.2)
http cookie(>=1.0.2,<2.0)
mime类型(>=1.16,<4.0)
netrc(~>0.8)
终端表(1.8.0)
unicode显示宽度(~>1.1,>=1.1.1)
unf(0.1.4)
unf_分机
unf_分机(0.0.7.6)
unicode-display_宽度(1.6.0)
平台
红宝石
依赖关系
pp(~>0.1.1)
rest客户端(~>2.0)
终端表(~>1.8)
捆绑
2.0.2
#捆绑安装
您必须在此锁定文件中使用Bundler 2或更高版本。
#gem列表| grep bundler
捆绑机(2.0.2,默认值:1.17.3,1.16.6)

bundle-v
告诉您现在使用的是哪一个,如果它不是2.0,则会出现此错误

根据
Gemfile
加载不同版本的
bundler
还不够智能。通常情况下,您可以使用
bundle exec
使其运行正常,但此时您遇到了鸡和蛋的问题,因为在加载正确的Bundler版本之前,该命令必须成功,但它不能,因为它很早就出错了


删除Bundler的所有版本,然后只重新安装2.x.

事实证明,这是我们使用的ruby docker映像的问题。它使用环境变量$BUNDLER\u VERSION,该变量覆盖绑定器自动切换。通过升级到较新的映像解决了此问题


也可以通过显式地将BUNDLER_VERSION设置为Gemfile所需的版本来解决此问题。

1.17版包含在基本ruby安装中,不允许我将其删除。这也不是一个选项,因为此docker映像需要能够处理这两个版本,同样,bundler文档说它应该能够。我已经读到,它绝对应该足够聪明,可以根据创建Gemfile.lock的版本使用不同版本的bundler。通常Docker图像集中在一件事情上,因此看到一个依赖项的两个版本尤其奇怪。如果这对您来说是一个真正的问题,您可以尝试使用。这是一个运行在concourse中的docker映像,用于我们的构建管道。因此,它负责构建我们的ruby项目。我的问题更多的是,为什么它没有按bundler所说的那样运行。这是因为一次只能安装一个
bundler
命令。如果RVM GEMSET对您不起作用,请考虑指定<代码> >捆绑器< /C>可执行的全部路径,如“代码> GEM内容捆绑器< /代码>将告诉您更多。