Bundler:您必须使用Bundler 2或更高版本来处理此锁定文件。

129

我正在使用Heroku,但每次尝试推送我的应用时都会弹出如下信息:

remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Ruby app detected
remote: 
remote:  !
remote:  !     You must use Bundler 2 or greater with this lockfile.
remote:  !
remote: /tmp/d20181109-104-g861yi/bundler-1.15.2/gems/bundler-1.15.2/lib/bundler/lockfile_parser.rb:108:in `warn_for_outdated_bundler_version': You must use Bundler 2 or greater with this lockfile. (Bundler::LockfileError)
remote:     from /tmp/d20181109-104-g861yi/bundler-1.15.2/gems/bundler-1.15.2/lib/bundler/lockfile_parser.rb:95:in `initialize'
remote:     from /app/tmp/buildpacks/b7af5642714be4eddaa5f35e2b4c36176b839b4abcd9bfe57ee71c358d71152b4fd2cf925c5b6e6816adee359c4f0f966b663a7f8649b0729509d510091abc07/lib/language_pack/helpers/bundler_wrapper.rb:130:in `new'
remote:     from /app/tmp/buildpacks/b7af5642714be4eddaa5f35e2b4c36176b839b4abcd9bfe57ee71c358d71152b4fd2cf925c5b6e6816adee359c4f0f966b663a7f8649b0729509d510091abc07/lib/language_pack/helpers/bundler_wrapper.rb:130:in `block in parse_gemfile_lock'
remote:     from /app/tmp/buildpacks/b7af5642714be4eddaa5f35e2b4c36176b839b4abcd9bfe57ee71c358d71152b4fd2cf925c5b6e6816adee359c4f0f966b663a7f8649b0729509d510091abc07/lib/language_pack/instrument.rb:18:in `block (2 levels) in instrument'
remote:     from /app/tmp/buildpacks/b7af5642714be4eddaa5f35e2b4c36176b839b4abcd9bfe57ee71c358d71152b4fd2cf925c5b6e6816adee359c4f0f966b663a7f8649b0729509d510091abc07/lib/language_pack/instrument.rb:40:in `yield_with_block_depth'
remote:     from /app/tmp/buildpacks/b7af5642714be4eddaa5f35e2b4c36176b839b4abcd9bfe57ee71c358d71152b4fd2cf925c5b6e6816adee359c4f0f966b663a7f8649b0729509d510091abc07/lib/language_pack/instrument.rb:17:in `block in instrument'
remote:     from /app/tmp/buildpacks/b7af5642714be4eddaa5f35e2b4c36176b839b4abcd9bfe57ee71c358d71152b4fd2cf925c5b6e6816adee359c4f0f966b663a7f8649b0729509d510091abc07/vendor/ruby/heroku-18/lib/ruby/2.5.0/benchmark.rb:308:in `realtime'
remote:     from /app/tmp/buildpacks/b7af5642714be4eddaa5f35e2b4c36176b839b4abcd9bfe57ee71c358d71152b4fd2cf925c5b6e6816adee359c4f0f966b663a7f8649b0729509d510091abc07/lib/language_pack/instrument.rb:16:in `instrument'
remote:     from /app/tmp/buildpacks/b7af5642714be4eddaa5f35e2b4c36176b839b4abcd9bfe57ee71c358d71152b4fd2cf925c5b6e6816adee359c4f0f966b663a7f8649b0729509d510091abc07/lib/language_pack/helpers/bundler_wrapper.rb:86:in `instrument'
remote:  !     Push rejected, failed to compile Ruby app.
remote: 
remote:  !     Push failed
remote: Verifying deploy...
remote: 
remote: !   Push rejected to my-proyect-1234.
remote: 

它说:“remote: ! You must use Bundler 2 or greater with this lockfile。”

但是我的Bundler版本是2.0.0.pre.1

不知道该怎么办,我尝试卸载bundle并重新安装它,我删除了Gemfile.lock并再次运行了bundle


3
如果您在 CI 环境中看到此消息,请设置 BUNDLER_VERSION 环境变量以匹配您的 Gemfile.lock 文件。export BUNDLER_VERSION='2.0' - DylanReile
21个回答

231

我有过类似的经历。

以下是我解决问题的方法

显示bundler gem的所有本地gems列表。

gem list bundler

注意:上述命令适用于 rbenv 版本管理器,rvm 版本管理器的命令可能不同。

这将显示本地安装的 bundler gem 的版本。

bundler (2.1.4, default: 1.17.2)

注意:您的版本可能与此处的版本不同。

如果您本地没有安装 Bundler 版本 2,则运行以下命令:

gem install bundler

或者

gem install bundler -v 2.1.4

注意: 将 2.1.4 替换为您想要安装的版本。

如果您已经在本地安装了 bundler 2 版本,或者刚刚安装了它,那么您只需要在本地安装 RubyGems 包管理器的更新即可。要做到这一点,请运行:

gem update --system

然后最后运行

bundle update --bundler

针对 Ruby on Rails 中 Docker 项目的解决方法

如果您在尝试使用 Docker 构建应用程序时遇到此问题,请按照以下步骤操作:

  1. 删除 Gemfile.lock 文件。

  2. 请不要再次运行 bundle install 命令来创建它。

  3. 根据需要运行适当的 docker builddocker-compose build 命令以构建您的项目。

这将重新创建 Gemfile.lock 文件并设置所需的 Bundler 版本以供您的项目使用。

注意:另外,您还可以在 Dockerfile 中添加此环境变量并定义 Bundler 版本。

ENV BUNDLER_VERSION=2.1.4

2
bundle update --bundler 不是正确的命令,应该使用 gem install bundler - mrbrdo

30

我来晚了,但今天我也遇到了这个问题,这个解决方案避免了卸载Bundler的步骤:只需运行

heroku buildpacks:set https://github.com/bundler/heroku-buildpack-bundler2
根据Bundler问题讨论,见此处

只是为了澄清,如果您已经在构建包中有 https://github.com/heroku/heroku-buildpack-ruby,那么您应该将其替换为 https://github.com/bundler/heroku-buildpack-bundler2 还是保留并添加它? - stevec
据我所知,没有必要删除任何内容,使用此命令只是告诉Heroku这是您想要为此应用程序使用的构建包(Heroku文档)。还请查看我上面链接到的讨论的其余部分以及警告此处 - 尽管Bundler建议在此博客文章中使用它,但此构建包目前尚未得到官方支持。 - Alex
最终我使用了 https://github.com/bundler/heroku-buildpack-bundler2 这个构建包代替 https://github.com/heroku/heroku-buildpack-ruby,看起来它可以正常工作。感谢你的帮助。 - stevec
4
此构建包已弃用,Heroku的 heroku/ruby 构建包现在直接支持bundler 2。 - Schneems
什么是Heroku? - IgorGanapolsky

28

我在本地机器(开发环境)上遇到了同样的问题 -

您必须使用Bundler 2或更高版本才能使用此锁定文件。
问题出在gemfile.lock文件上,因为我的本地bundle版本和项目bundle版本不匹配!以下是解决方案 -

  1. 删除gemfile.lock文件
  2. 运行命令 - bundle install
    这解决了我的问题,非常顺利!希望对其他人也有用!

5
这种方法的一个潜在问题是删除Gemfile.lock会导致所有版本状态丢失。Bundler将为所有gem计算新版本,考虑到几乎每天都会有新版本的gems,您将得到一个与您测试和提交给Gemfile.lock不同的依赖树。这可能会导致错误。 - Dave Morse

8

对于我来说,只需运行gem update bundler便解决了问题。


6

我通过运行gem uninstall bundler来解决了这个问题,以删除2.0.0.pre.1版本,同时重命名Gemfile.lock文件(以便停止使用它),然后运行bundle install重新安装gemfiles。在我的情况下,我已经可以访问由heroku安装的早期bundler版本(因此当我运行gem uninstall时,显示了所有可用版本,并选择删除2.0.0.pre.1)。


5

即使系统上安装了Bundler 2, 在部署使用Ruby 2.6的应用时仍然会出现此错误。原因是Ruby 2.6附带了默认版本的Bundler。

如果您正在使用Ruby 2.6,则升级到Ruby 2.6.1可避免此问题。


5

这个问题与Ruby 2.6.0无关。 在使用bin stubs时,默认版本的Bundler被错误地调用。 更多详细信息请参考以下链接

解决方案: 系统上可用的最新版本是Bundler 2,因此应该调用它而不是默认的bundler版本。

更新Rubygems。

gem update --system

更新Bundler

gem install bundler

更新项目中的Gemfile.lock文件

bundler update --bundler

4

通常情况下,要解决问题,您需要卸载您当前的bundler版本,删除gemfile.lock文件,最后运行gem install bundler -v 1.15.2(这是Heroku使用的版本)。

完成后,再次运行git push heroku master即可成功!


1
Heroku现在支持Bundler 2。 - Schneems

2

本地系统

gem install bundler:2.0.0.pre.1
bundle _2.0.0.pre.1_ install

需要打包的版本号为"2.0.0.pre.1"。

不要删除Gemfile.lock文件,它是有用的


2

如果您正在使用像 FROM:ruby:2.X.X 这样的 Docker 镜像,则可以执行以下操作:

FROM ruby:2.6.2
... # omitted
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN gem uninstall bundler
RUN gem install bundler -v 2.1.4
RUN bundle update --bundler
RUN bundle install
... # omitted

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接