我正在使用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
派对有点晚了,但我今天也遇到了这个,这个解决方案避免了卸载Bundler:只是运行
heroku buildpacks:set https://github.com/bundler/heroku-buildpack-bundler2
根据关于Bundler问题here的讨论。
我在本地机器(开发)上遇到同样的问题 -
您必须将Bundler 2或更高版本与此lockfile一起使用。 问题出在gemfile.lock上,因为我的本地捆绑版本和项目捆绑版本不匹配!这是解决方案 -
bundle install
这解决了我的问题,很顺利!希望对别人有用!是的,所以一般卸载你的捆绑器版本,删除gemfile.lock,最后运行gem install bundler -v 1.15.2
(这是heroku使用的版本)工作。
之后运行git push heroku master
工作!
我通过运行gem uninstall bundler
删除2.0.0.pre.1解决了这个问题,重命名了Gemfile.lock文件(将其从使用中删除),然后运行bundle install
重新安装gemfiles。在我的情况下,我已经访问了heroku安装的早期bundler版本(所以当我运行gem uninstall
时,我看到所有版本都可用并选择删除2.0.0.pre.1)。
Heroku不使用Bundler 2.0,而是使用1.15.2,正如tracelog暗示的那样。
据我所知,“解决方法”是创建自己的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
我删除了该项目并从Heroku应用程序中创建了一个git clone,不知道它是否是一个很好的解决方案,但它对我有用。
我在本地系统中遇到了同样的问题,我的ruby版本很低,因为错误发生了。通过将其切换到ruby的更新版本来修复它。
即使在系统上使用bundler 2,在使用Ruby 2.6部署应用程序时仍然会发生此错误,因为Ruby 2.6附带了默认版本的bundler。
如果您使用的是Ruby 2.6,请升级到Ruby 2.6.1以避免此问题。
对于不使用Heroku的人:
我尝试了一切,但我仍然收到这个错误。即使这个链接也没有帮助我:https://github.com/jekyll/jekyll/issues/7463
所以这是我的解决方案:
在GitHub上推送您的代码。删除项目文件夹创建一个新文件夹并拉动你的代码包安装就是这样。捆绑更新--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
。
干杯。