您必须将此捆绑文件使用Bundler 2或更高版本

时间:2018-11-09 18:46:47

标签: ruby-on-rails heroku ruby-on-rails-5 heroku-cli

我正在使用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:!您必须对此捆绑文件使用Bundler 2或更高版本。'

  

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

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

19 个答案:

答案 0 :(得分:28)

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

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

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

答案 1 :(得分:8)

  

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

您必须将Bundler 2或更高版本与此锁定文件一起使用。
问题与 gemfile.lock 有关,因为我的本地捆绑软件版本和项目捆绑软件版本不匹配! 这是解决方案-

  1. 我删除了gemfile.lock
  2. 运行命令-bundle install
    那解决了我的问题,很顺利! 希望会为别人工作!

答案 2 :(得分:3)

简单的gem update bundler为我做到了。

答案 3 :(得分:3)

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

运行git push heroku master之后就可以了!

答案 4 :(得分:2)

对于本地系统

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

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

为此{@ {3}},请不要删除您的Gemfile.lock。

答案 5 :(得分:1)

我通过运行gem uninstall bundler来删除2.0.0.pre.1,重命名了Gemfile.lock文件(以将其从使用中删除),然后运行bundle install重新安装了gemfile,解决了该问题。就我而言,我已经可以访问heroku安装的较早的捆绑软件版本(因此,当我运行gem uninstall时,系统会显示所有可用版本,并选择删除2.0.0.pre.1)。

答案 6 :(得分:1)

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

答案 7 :(得分:1)

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

  1. bundle update rails

  2. 删除Gemfile.lock

  3. bundle

答案 8 :(得分:1)

我也有类似的经历。

这是我解决的方式

显示捆绑包宝石的所有本地宝石的列表

gem list bundler

N / B:以上命令用于rbenv版本管理器,用于rvm的命令可能不同

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

bundler (2.0.2, default: 1.17.2)

如果本地没有安装捆绑软件版本2,请运行

gem install bundler

OR

gem install bundler -v 2.0.2

如果已经在本地安装或刚刚安装了捆绑软件版本2,则只需在本地安装RubyGems的更新即可。为此,请运行

gem update --system

然后终于运行

bundler update --bundler

仅此而已

我希望这会有所帮助。

答案 9 :(得分:1)

Heroku不使用Bundler 2.0,而是使用1.15.2,这是跟踪日志所暗示的。

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

  

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

     

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的情况,因为它不正确地从binstub中调用,就像@Schneems在评论中提到的那样。他已将其报告为Ruby Bug #15622

答案 10 :(得分:0)

对于不使用Heroku的人

我尝试了所有操作,但仍收到此错误。甚至这个链接也没有帮助我:https://github.com/jekyll/jekyll/issues/7463

这就是我的解决方案:

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

另一件事: 我更新了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设置为默认版本。

欢呼。

答案 11 :(得分:0)

即使系统上具有捆绑器2,由于Ruby 2.6附带了默认版本的捆绑器,因此在使用Ruby 2.6部署应用程序时仍然会发生此错误。

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

答案 12 :(得分:0)

我在本地系统中遇到了同样的问题,由于发生错误,我的Ruby版本较低。通过将其切换到红宝石的更新版本进行了修复。

答案 13 :(得分:0)

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

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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

答案 16 :(得分:0)

Ruby 2.6.0并非此问题。 使用bin存根时会错误地调用Bundler的默认版本。 有关更多详细信息,请参阅以下link

解决方案: Bundler 2在系统上可用,并且是最新版本,因此应调用它,而不是默认的捆绑程序版本。

更新Rubygems

gem update --system

更新捆绑器

gem install bundler

更新项目中的Gemfile.lock

bundler update --bundler

答案 17 :(得分:0)

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

就我而言,问题是由于使用 rvm gemset 引起的,而不是我使用的ruby 2.7.1和bundler 2.1.4(相同的捆绑Gemfile被锁定)。

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

黑客很开心!

答案 18 :(得分:0)

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

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

和,捆绑

$ bundle install --path=vendor/bundle

然后,启动 Rails 服务器

$ bundle exec rails s

然后,连接到浏览器。

http://localhost:3000/