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 build
或docker-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 --bundler
see 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 后以部署模式安装
您正在运行 Vue 的 esm-bundler 构建。建议配置您的捆绑器
设置“EDITOR”或“BUNDLER_EDITOR”环境变量