Default version of Bundler incorrectly invoked when using binstubs
When trying to run a binstub with Ruby 2.6.1 with Bundler 2.0.1 on the system, the wrong version of Bundler gets loaded which then fails when the Gemfile.lock points to a 2.x version (since the default version that ships with Ruby is Bundler 1.x. While this was discovered on Heroku and is discussed in this issue https://github.com/heroku/heroku-buildpack-ruby/issues/856#issuecomment-467205932 I was able to replicate the problem fairly easily with docker. I've provided instructions below.
Start a docker image with Ruby 2.6.1
docker run -it --rm ruby:2.6.1 bash
Install bundler, rails, make a new app, and remove the
begin/rescue/end from the
bin/rake binstub. To trigger the error run a
rake command without
gem install bundler -v 2.0.1 gem install rails -v 6.0.0.beta1 rails new ruby-2-6-bundler-2-issue cd ruby-2-6-bundler-2-issue cat <<EOT > bin/rake #!/usr/bin/env ruby require_relative '../config/boot' require 'rake' Rake.application.run EOT rake -T
You must use Bundler 2 or greater with this lockfile.
Bundler 2 is available on the system, and is the latest version, so it should be invoked instead of the default bundler version.
Updated by deivid (David Rodríguez) about 3 years ago
Forgot to comment here. I'm pretty sure this is the same as https://bugs.ruby-lang.org/issues/15582? The fix for it should be released in the next patch level version
For the moment
gem update --system indeed workarounds it, since it forces the reinstallation of the default bundler gem, which is the culprit here (its gemspec's file list is incomplete).
Updated by hsbt (Hiroshi SHIBATA) about 3 years ago
- Backport changed from 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN to 2.4: DONTNEED, 2.5: DONTNEED, 2.6: DONTNEED
- Status changed from Assigned to Rejected