在Gemfile.lock存在的情况下,捆绑器版本未自动切换

时间:2019-07-24 22:00:54

标签: ruby 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)

2 个答案:

答案 0 :(得分:1)

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

根据bundler来加载Gemfile的不同版本还不够(还不够?)。通常,您可以使用bundle exec使之运行,但是此时您遇到了一个鸡与蛋的问题,因为该命令必须在成功加载正确的Bundler版本之前成功执行,但是不能执行,因为它会出错早点出来。

删除所有版本的Bundler并仅重新安装2.x。

答案 1 :(得分:0)

事实证明,这是我们使用的ruby docker镜像的问题。它利用环境变量$ BUNDLER_VERSION覆盖捆绑程序的自动切换。通过升级到较新的映像即可解决此问题。

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