Bundler:您必须将 Bundler 2 或更高版本与此锁定文件一起使用

Bundler: You must use Bundler 2 or greater with this lockfile

我正在使用 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.'

But my Bundler version is 2.0.0.pre.1

不知道该怎么办,我尝试卸载捆绑包并重新安装,我删除了 Gemfile.lock 并再次输入 bundle

Heroku 不使用 Bundler 2.0,而是 1.15.2,正如跟踪日志提示的那样。

据我所知,“解决方法”是创建您自己的构建包,或者简单地创建自己的构建包:

Open lib/language_pack/ruby.rb in your editor, and change the following line:

BUNDLER_VERSION = "1.11.2"

(README.md 在 https://github.com/heroku/heroku-buildpack-ruby)

更新:从 Ruby 2.6.1 和 Bundler 2.0.1 开始,Heroku 现在支持 Bundler 2.0.1。 https://devcenter.heroku.com/articles/bundler-version#known-upgrade-issues

不是 Ruby 2.6.0 的情况,因为这是从 binstubs 错误地调用的,正如@Schneems 在评论中提到的那样。他已将此报告为 Ruby Bug #15622

我通过 运行 gem uninstall bundler 删除 2.0.0.pre.1 解决了这个问题,重命名了 Gemfile.lock 文件(将其从使用中删除)然后 运行 bundle install 重新安装 gemfiles。在我的例子中,我已经可以访问 heroku 安装的早期捆绑器版本(所以当我 运行 gem uninstall,我看到所有可用的版本并选择删除 2.0.0.pre.1 ).

我删除了该项目并从 Heroku 应用程序中制作了一个 git 克隆,不知道这是否是一个好的解决方案,但它对我有用。

是的,所以通常 卸载您的捆绑程序版本删除 gemfile.lock,最后 运行 gem install bundler -v 1.15.2(heroku 使用的版本)有效。

之后 运行 git push heroku master 成功了!

聚会有点晚了,但我今天也 运行 加入了这个,这个解决方案避免了必须卸载 Bundler:只是 运行

heroku buildpacks:set https://github.com/bundler/heroku-buildpack-bundler2

根据关于 Bundler 问题的讨论 here

我在我的本地系统中遇到了同样的问题,我的 ruby 版本很低,因此发生了错误。通过将其切换到 ruby.

的更新版本来修复它

I had same issue on Local Machine(Development) as-

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

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

即使系统上有 bundler 2,在使用 Ruby 2.6 部署应用程序时仍然会发生此错误,因为 Ruby 2.6 附带默认版本的 bundler。

如果您使用的是 Ruby 2.6,请升级到 Ruby 2.6.1 以避免此问题。

对于不使用 Heroku 的人

我尝试了所有方法,但仍然收到此错误。即使这个 link 对我没有帮助:https://github.com/jekyll/jekyll/issues/7463

所以这是我的解决方案:

将您的代码推送到 GitHub。 删除项目文件夹 创建一个新文件夹并提取您的代码 捆绑安装 而已。 bundler update --bundler 最后没有帮助我,我没有使用它。

还有一件重要的事: 我更新了 ruby 版本,但出现此错误,因为我的 RVM 默认版本是旧版本。 即使您使用 rvm use VERSION_NUMBER -- default 也无济于事,因为一旦您从终端注销,默认版本就会更改为旧版本,您将遇到同样的问题。

为此你可以使用这个答案: How to set default Ruby version with RVM?

或者使用 rvm uninstall X.X.X 卸载旧的 ruby 版本并使用 rvm install X.X.X 安装新版本并通过 rvm use --default X.X.X 将其设置为默认版本。

干杯。

我也有过类似的经历。

我是这样解决的

为捆绑器显示所有本地 gem 的列表 gem

gem list bundler

N/B: 上面的命令是针对rbenv版本管理器的,针对rvm的可能不同

这将显示本地安装的捆绑器gem的版本

bundler (2.1.4, default: 1.17.2)

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

如果您没有在本地安装捆绑程序版本 2,则 运行

gem install bundler

gem install bundler -v 2.1.4

注意:将2.1.4替换为你要安装的版本

如果您已经在本地安装或刚刚安装了版本 2 的捆绑程序,那么您只需在本地安装 RubyGems Package Manager 的更新。为此,运行

gem update --system

最后 运行

bundle update --bundler

对于 Ruby 中的 Docker 个项目 Rails

如果您在尝试使用 Docker 构建应用程序时遇到此问题,只需执行以下操作:

  1. 删除Gemfile.lock文件

  2. 不要运行宁bundle install重新创建它。

  3. 运行 您的 docker builddocker-compose build 命令适合构建您的项目。

这将 re-create Gemfile.lock 文件并在 Gemfile.lock 文件中设置项目所需的适当版本的捆绑器。

N/B:作为旁注,您还可以将此环境变量添加到您的 Dockerfile 并定义 Bundler 版本。

ENV BUNDLER_VERSION=2.1.4

我在 Ruby 2.6.3 中遇到了同样的问题,答案中列出的任何内容都无济于事。 只有以下解决方案对我有用:

  1. bundle update rails

  2. 移除Gemfile.lock

  3. bundle

对于本地系统

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

其中“2.0.0.pre.1”是您需要捆绑的任何版本。

不要为此删除你的 Gemfile.lock,it's there for a reason

我遇到了同样的问题。在我的Gemfile.lock中看到最后"bundled with bundler 2.0.2",但是运行bundle --version给了我version 1.17..。对我来说,它解决了只需使用以下命令更新我的捆绑器:bundle update --bundler see bundler documentation

使用 bundler 2.0.1 允许根据锁定文件的要求自动切换版本。在这方面,安装 bundler 2.0.1 对我有用。
安装捆绑器 2.0.1
gem install bundler -v 2.0.1
更新捆绑器
bundle update -bundler

简单 gem update bundler 帮我搞定了。

如果您使用 docker 图片 FROM:ruby:2.X.X 那么您可以执行以下操作:

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

Ruby 2.6.0 是没有这个问题的。 使用 bin 存根时,Bundler 的默认版本被错误地调用。 更多详情请参考以下link

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

更新Ruby宝石

gem update --system

更新捆绑器

gem install bundler

在您的项目中更新 Gemfile.lock

bundler update --bundler

我今天遇到了同样的问题。

在我的例子中,问题是由于使用 rvm gemset 而不是最新的 ruby 2.7.1 和 bundler 2.1.4(同一个 bundle Gemfile 是锁定)。

因此,在执行此处列出的任何其他解决方案之前,只需看看您的 rvm 环境。特别是如果您 运行 正在制作您的项目。

祝黑客愉快!

删除 gem 历史记录和安装在 rails 应用程序中的模块。

$ rm -rf vendor/bundle
$ rm Gemfile.lock

和,捆绑

$ bundle install --path=vendor/bundle

然后,启动 Rails 服务器

$ bundle exec rails s

然后,连接到浏览器。

http://localhost:3000/

同样的错误,但在本地。 我终于发现我在命令行上使用了错误版本的 ruby(我正在使用 uru 来管理 ruby 版本。) 毕竟,gemfile 怎么可能使用并生成一个版本为 2.1.4 的锁定文件,但我的搜索没有找到那个版本!

>gem list bundler

*** LOCAL GEMS ***

bundler (default: 1.16.2, 1.13.1)
capistrano-bundler (1.6.0, 1.1.4)

所以我改成了正确的 ruby 版本,一切都很好。

请记住,gems 与您的 Ruby 版本一起存储!