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

Posted

技术标签:

【中文标题】Bundler:您必须使用 Bundler 2 或更高版本与此锁定文件【英文标题】:Bundler: You must use Bundler 2 or greater with this lockfile 【发布时间】:2019-04-13 08:58:30 【问题描述】:

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

它说'远程:!您必须将此锁定文件与 Bundler 2 或更高版本一起使用。'

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

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

【问题讨论】:

如果您在 CI 环境中看到这种情况,请设置 BUNDLER_VERSION envvar 以匹配您的 Gemfile.lock。 export BUNDLER_VERSION='2.0' 【参考方案1】:

我也有类似的经历。

我是这样解决的

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

gem list bundler

N/B:上面的命令是针对 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替换为您要安装的版本

如果您已经在本地安装或刚刚安装了捆绑程序版本 2,那么您只需在本地安装 RubyGems 包管理器的更新即可。为此,请运行

gem update --system

然后最后运行

bundle update --bundler

用于 Ruby on Rails 中的 Docker 项目

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

    删除Gemfile.lock文件

    不要通过运行bundle install再次创建它。

    根据需要运行docker builddocker-compose build 命令来构建您的项目。

这将重新创建 Gemfile.lock 文件并在 Gemfile.lock 文件中设置项目所需的适当版本的捆绑程序。

N/B:附带说明,您还可以将此环境变量添加到您的 Dockerfile 并定义 Bundler 版本。

ENV BUNDLER_VERSION=2.1.4

【讨论】:

【参考方案2】:

聚会有点晚了,但我今天也遇到了这个问题,这个解决方案避免了卸载 Bundler:只需运行

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

根据关于 Bundler 问题 here 的讨论。

【讨论】:

澄清一下,如果你已经在 buildpacks 中有https://github.com/heroku/heroku-buildpack-ruby,你应该用https://github.com/bundler/heroku-buildpack-bundler2 替换它还是另外有它? 据我所知,没有必要删除任何内容,使用此命令您只是告诉 Heroku 这是您要用于此应用程序的 buildpack (Heroku docs)。另请查看我在上面链接到的其余讨论和警告here - 尽管 Bundler 建议在此 blog post 中使用它,但目前尚未正式支持此 buildpack。 我最终使用了https://github.com/bundler/heroku-buildpack-bundler2 buildpack 代替了https://github.com/heroku/heroku-buildpack-ruby,它似乎可以工作。感谢您的帮助 此 buildpack 已被弃用,Heroku heroku/ruby buildpack 现在直接支持 bundler 2 什么是 Heroku?【参考方案3】:

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

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

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

【讨论】:

这种方法的一个潜在问题是删除 Gemfile.lock 会导致您的所有版本状态丢失。 Bundler 将为您的所有 gem 计算新版本,并且鉴于几乎每天都会有新版本的 gem,您将获得与您测试并提交给 Gemfile.lock 的依赖关系树不同。这可能会中断。【参考方案4】:

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

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

【讨论】:

【参考方案5】:

简单的gem update bundler 为我做了。

【讨论】:

【参考方案6】:

是的,所以通常卸载您的 bundler 版本删除 gemfile.lock,最后运行 gem install bundler -v 1.15.2(这是 heroku 正在使用的版本)工作。

之后运行git push heroku master 工作!

【讨论】:

Heroku 现在支持 Bundler 2。【参考方案7】:

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

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

更新 Rubygems

gem update --system

更新捆绑器

gem install bundler

更新项目中的 Gemfile.lock

bundler update --bundler

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

对于本地系统

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。

【讨论】:

【参考方案10】:

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

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

在编辑器中打开 lib/language_pack/ruby.rb,并更改以下行:

BUNDLER_VERSION = "1.11.2"

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

更新:从 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

【讨论】:

我们现在支持 Bundler 2.0.1。 FWIW 更改捆绑器版本也无济于事,您还必须在我们的 S3 存储库上构建和托管该版本的捆绑器。 @Schneems 参考 heroku devcenter 和您在 Ruby 跟踪器中的错误更新了答案!感谢更新;直到现在我自己才看到这个!【参考方案11】:

对于不使用 Heroku 的人

我尝试了所有方法,但仍然收到此错误。即使这个链接也没有帮助我: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 的默认值。

干杯。

【讨论】:

【参考方案12】:

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

    bundle update rails

    删除 Gemfile.lock

    bundle

【讨论】:

【参考方案13】:

我遇到了同样的问题。在我的Gemfile.lock 中,最后我看到“与捆绑程序 2.0.2 捆绑”,但运行 bundle --version 给了我version 1.17..。对我来说,它解决了使用以下命令更新我的捆绑器:bundle update --bundlersee bundler documentation

【讨论】:

【参考方案14】:

如果您使用的是像 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

【讨论】:

【参考方案15】:

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

【讨论】:

【参考方案16】:

我在本地系统中遇到了同样的问题,我的 ruby​​ 版本较低,因此发生了错误。通过将其切换到 ruby​​ 的更新版本来修复它。

【讨论】:

【参考方案17】:

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

【讨论】:

【参考方案18】:

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

在我的情况下,问题是由于使用 rvm gemset 而不是我在 ruby​​ 2.7.1 和 bundler 2.1.4 中使用的最新版本(同一个捆绑 Gemfile 被锁定)。

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

破解快乐!

【讨论】:

【参考方案19】:

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

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

和,捆绑

$ bundle install --path=vendor/bundle

然后,启动 Rails 服务器

$ bundle exec rails s

然后,连接到浏览器。

http://localhost:3000/

【讨论】:

【参考方案20】:

同样的错误,但在本地。 我终于发现我在命令行上使用了错误的 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​​,一切都很好。

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

【讨论】:

以上是关于Bundler:您必须使用 Bundler 2 或更高版本与此锁定文件的主要内容,如果未能解决你的问题,请参考以下文章

Bundler:您尝试在更改 Gemfile 后以部署模式安装

使用bundler时如何在Gemfile中使用gem?

您正在运行 Vue 的 esm-bundler 构建。建议配置您的捆绑器

设置“EDITOR”或“BUNDLER_EDITOR”环境变量

使用 npm 安装或更新所需的包,就像 ruby​​gems 的 bundler

Rubygems、Bundler 和 RVM 之间的关系