-
Notifications
You must be signed in to change notification settings - Fork 27
Remove unnecessary bundler installation from Dockerfile #153
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Bundler has been included as a default gem since Ruby 2.6. Rails 7.0, which is our oldest version in Rails CI, requires Ruby 2.7 or higher. This means all Ruby versions we test against already have Bundler pre-installed. When `gem install bundler` is run on our Rails Nightly CI, it creates a duplicate installation of bundler: - As default gem: /usr/local/lib/ruby/4.0.0+0/bundler/ - `gem install bundler`: /usr/local/lib/ruby/gems/4.0.0+0/gems/bundler-4.0.0/ This duplication causes constant redefinition warnings such as: ``` warning: already initialized constant Gem::VALIDATES_FOR_RESOLUTION ``` `gem update --system` takes care of upgrading not only `gem` command but also `bundler` command so we can use the latest available bundler command after removing the `gem install bundler`. ``` $ ruby -v ruby 3.2.9 (2025-07-24 revision 8f611e0c46) [x86_64-linux] $ gem -v 3.4.19 $ bundler -v Bundler version 2.4.19 $ gem update --system Updating rubygems-update Fetching rubygems-update-4.0.0.gem Successfully installed rubygems-update-4.0.0 Parsing documentation for rubygems-update-4.0.0 Installing ri documentation for rubygems-update-4.0.0 Done installing documentation for rubygems-update after 0 seconds Parsing documentation for rubygems-update-4.0.0 Done installing documentation for rubygems-update after 0 seconds Installing RubyGems 4.0.0 Successfully built RubyGem Name: bundler Version: 4.0.0 File: bundler-4.0.0.gem Bundler 4.0.0 installed RubyGems 4.0.0 installed Regenerating binstubs Regenerating plugins Parsing documentation for rubygems-4.0.0 Installing ri documentation for rubygems-4.0.0 ... snip ... RubyGems system software updated $ ruby -v ruby 3.2.9 (2025-07-24 revision 8f611e0c46) [x86_64-linux] $ gem -v 4.0.0 $ bundler -v 4.0.0 $ ``` References: - Ruby 2.6.0 Released: https://www.ruby-lang.org/en/news/2018/12/25/ruby-2-6-0-released/ "Bundler is now installed as a default gem." - Rails 7.0 requires Ruby 2.7+: https://github.com/rails/rails/blob/7-0-stable/rails.gemspec#L12 - Rails CI against 6-1-stable branch https://buildkite.com/rails/rails/builds?branch=6-1-stable no longer runs since Oct 27 2025: https://buildkite.com/rails/rails/builds/123203/steps/canvas Fixes rails/rails#56325
|
Somehow, the same warning appears when testing with Ruby 3.4 https://buildkite.com/rails/rails-ci/builds/335#019afd2c-1e12-4a18-93d4-9abe3de45e82/1565-1578 |
|
Reproduced these failures with Ruby 3.4 locally.
$ ruby -v
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +PRISM [x86_64-linux]
$ gem -v
4.0.0
$ bundler -v
4.0.0
$ gem install bundler
Successfully installed bundler-4.0.0
Parsing documentation for bundler-4.0.0
Installing ri documentation for bundler-4.0.0
Done installing documentation for bundler after 0 seconds
1 gem installed
$ ruby -v
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +PRISM [x86_64-linux]
$ gem -v
4.0.0
$ bundler -v
4.0.0
$ rm ../Gemfile.lock ; bundle install ; bundle exec ruby -w -Itest -Ilib -I../activesupport/lib -I../actionpack/lib -I../actionview/lib -I../activemodel/lib test/generators/scaffold_generator_test.rb --seed 46859
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Bundle complete! 82 Gemfile dependencies, 235 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
1 installed gem you directly depend on is looking for funding.
Run `bundle fund` for details
Run options: --seed 46859
# Running:
............................
Finished in 31.506383s, 0.8887 runs/s, 16.2189 assertions/s.
28 runs, 511 assertions, 0 failures, 0 errors, 0 skips
$ |
|
This one is minimum. $ bundle exec ruby -w -Itest test/generators/scaffold_generator_test.rb -n test_scaffold_tests_pass_by_default_inside_mountable_engine
Run options: -n test_scaffold_tests_pass_by_default_inside_mountable_engine --seed 41468
# Running:
F
Failure:
ScaffoldGeneratorTest#test_scaffold_tests_pass_by_default_inside_mountable_engine [test/generators/scaffold_generator_test.rb:580]:
Expected /8 runs, 12 assertions, 0 failures, 0 errors/ to match "/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/rubygems_ext.rb:177: warning: already initialized constant Gem::VALIDATES_FOR_RESOLUTION\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/rubygems_ext.rb:177: warning: previous definition of VALIDATES_FOR_RESOLUTION was here\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:184: warning: already initialized constant Bundler::FileUtils::VERSION\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:184: warning: previous definition of VERSION was here\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:2152: warning: already initialized constant Bundler::FileUtils::Entry_::S_IF_DOOR\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:2152: warning: previous definition of S_IF_DOOR was here\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:2448: warning: already initialized constant Bundler::FileUtils::Entry_::DIRECTORY_TERM\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:2448: warning: previous definition of DIRECTORY_TERM was here\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:2564: warning: already initialized constant Bundler::FileUtils::OPT_TABLE\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:2564: warning: previous definition of OPT_TABLE was here\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:2622: warning: already initialized constant Bundler::FileUtils::LOW_METHODS\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:2622: warning: previous definition of LOW_METHODS was here\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:2629: warning: already initialized constant Bundler::FileUtils::METHODS\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:2629: warning: previous definition of METHODS was here\nbin/rails aborted!\nArgumentError: Trying to register Bundler::GemfileError for status code 4 but Bundler::GemfileError is already registered (ArgumentError)\n/home/yahonda/src/github.com/rails/rails/railties/test/fixtures/tmp/bukkits/Rakefile:6:in '<top (required)>'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/commands/rake/rake_command.rb:48:in 'block in Rails::Command::RakeCommand.with_rake'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/commands/rake/rake_command.rb:46:in 'Rails::Command::RakeCommand.with_rake'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/commands/rake/rake_command.rb:20:in 'Rails::Command::RakeCommand.perform'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/commands/test/test_command.rb:73:in 'Rails::Command::TestCommand#run_prepare_task'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/commands/test/test_command.rb:32:in 'Rails::Command::TestCommand#perform'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/command/base.rb:176:in 'Rails::Command::Base#invoke_command'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/command/base.rb:71:in 'Rails::Command::Base.perform'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/command.rb:65:in 'block in Rails::Command.invoke'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/command.rb:143:in 'Rails::Command.with_argv'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/command.rb:63:in 'Rails::Command.invoke'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/commands.rb:18:in '<top (required)>'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/engine/commands.rb:9:in '<top (required)>'\nbin/rails:14:in '<main>'\n(See full trace by running task with --trace)\n".
bin/test test/generators/scaffold_generator_test.rb:572
Finished in 3.414412s, 0.2929 runs/s, 0.5858 assertions/s.
1 runs, 2 assertions, 1 failures, 0 errors, 0 skips
$ |
|
Removing the $ bundle exec ruby -w -Itest test/generators/scaffold_generator_test.rb -n test_scaffold_tests_pass_by_default_inside_mountable_engine
Run options: -n test_scaffold_tests_pass_by_default_inside_mountable_engine --seed 48360
# Running:
/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/rubygems_ext.rb:177: warning: already initialized constant Gem::VALIDATES_FOR_RESOLUTION
/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/rubygems_ext.rb:177: warning: previous definition of VALIDATES_FOR_RESOLUTION was here
/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:184: warning: already initialized constant Bundler::FileUtils::VERSION
/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:184: warning: previous definition of VERSION was here
/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:2152: warning: already initialized constant Bundler::FileUtils::Entry_::S_IF_DOOR
/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:2152: warning: previous definition of S_IF_DOOR was here
/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:2448: warning: already initialized constant Bundler::FileUtils::Entry_::DIRECTORY_TERM
/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:2448: warning: previous definition of DIRECTORY_TERM was here
/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:2564: warning: already initialized constant Bundler::FileUtils::OPT_TABLE
/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:2564: warning: previous definition of OPT_TABLE was here
/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:2622: warning: already initialized constant Bundler::FileUtils::LOW_METHODS
/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:2622: warning: previous definition of LOW_METHODS was here
/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:2629: warning: already initialized constant Bundler::FileUtils::METHODS
/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:2629: warning: previous definition of METHODS was here
bin/rails aborted!
ArgumentError: Trying to register Bundler::GemfileError for status code 4 but Bundler::GemfileError is already registered (ArgumentError)
/home/yahonda/src/github.com/rails/rails/railties/test/fixtures/tmp/bukkits/Rakefile:6:in '<top (required)>'
/home/yahonda/src/github.com/rails/rails/railties/lib/rails/commands/rake/rake_command.rb:48:in 'block in Rails::Command::RakeCommand.with_rake'
/home/yahonda/src/github.com/rails/rails/railties/lib/rails/commands/rake/rake_command.rb:46:in 'Rails::Command::RakeCommand.with_rake'
/home/yahonda/src/github.com/rails/rails/railties/lib/rails/commands/rake/rake_command.rb:20:in 'Rails::Command::RakeCommand.perform'
/home/yahonda/src/github.com/rails/rails/railties/lib/rails/command.rb:150:in 'Rails::Command.invoke_rake'
/home/yahonda/src/github.com/rails/rails/railties/lib/rails/command.rb:67:in 'block in Rails::Command.invoke'
/home/yahonda/src/github.com/rails/rails/railties/lib/rails/command.rb:143:in 'Rails::Command.with_argv'
/home/yahonda/src/github.com/rails/rails/railties/lib/rails/command.rb:63:in 'Rails::Command.invoke'
/home/yahonda/src/github.com/rails/rails/railties/lib/rails/commands.rb:18:in '<top (required)>'
/home/yahonda/src/github.com/rails/rails/railties/lib/rails/engine/commands.rb:9:in '<top (required)>'
bin/rails:14:in '<main>'
(See full trace by running task with --trace)
F
Failure:
ScaffoldGeneratorTest#test_scaffold_tests_pass_by_default_inside_mountable_engine [test/generators/scaffold_generator_test.rb:578]:
Expected /8 runs, 12 assertions, 0 failures, 0 errors/ to match "/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/rubygems_ext.rb:177: warning: already initialized constant Gem::VALIDATES_FOR_RESOLUTION\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/rubygems_ext.rb:177: warning: previous definition of VALIDATES_FOR_RESOLUTION was here\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:184: warning: already initialized constant Bundler::FileUtils::VERSION\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:184: warning: previous definition of VERSION was here\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:2152: warning: already initialized constant Bundler::FileUtils::Entry_::S_IF_DOOR\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:2152: warning: previous definition of S_IF_DOOR was here\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:2448: warning: already initialized constant Bundler::FileUtils::Entry_::DIRECTORY_TERM\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:2448: warning: previous definition of DIRECTORY_TERM was here\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:2564: warning: already initialized constant Bundler::FileUtils::OPT_TABLE\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:2564: warning: previous definition of OPT_TABLE was here\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:2622: warning: already initialized constant Bundler::FileUtils::LOW_METHODS\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:2622: warning: previous definition of LOW_METHODS was here\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/bundler-4.0.0/lib/bundler/vendor/fileutils/lib/fileutils.rb:2629: warning: already initialized constant Bundler::FileUtils::METHODS\n/home/yahonda/.local/share/mise/installs/ruby/3.4.7/lib/ruby/site_ruby/3.4.0/bundler/vendor/fileutils/lib/fileutils.rb:2629: warning: previous definition of METHODS was here\nbin/rails aborted!\nArgumentError: Trying to register Bundler::GemfileError for status code 4 but Bundler::GemfileError is already registered (ArgumentError)\n/home/yahonda/src/github.com/rails/rails/railties/test/fixtures/tmp/bukkits/Rakefile:6:in '<top (required)>'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/commands/rake/rake_command.rb:48:in 'block in Rails::Command::RakeCommand.with_rake'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/commands/rake/rake_command.rb:46:in 'Rails::Command::RakeCommand.with_rake'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/commands/rake/rake_command.rb:20:in 'Rails::Command::RakeCommand.perform'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/commands/test/test_command.rb:73:in 'Rails::Command::TestCommand#run_prepare_task'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/commands/test/test_command.rb:32:in 'Rails::Command::TestCommand#perform'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/command/base.rb:176:in 'Rails::Command::Base#invoke_command'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/command/base.rb:71:in 'Rails::Command::Base.perform'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/command.rb:65:in 'block in Rails::Command.invoke'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/command.rb:143:in 'Rails::Command.with_argv'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/command.rb:63:in 'Rails::Command.invoke'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/commands.rb:18:in '<top (required)>'\n/home/yahonda/src/github.com/rails/rails/railties/lib/rails/engine/commands.rb:9:in '<top (required)>'\nbin/rails:14:in '<main>'\n(See full trace by running task with --trace)\n".
bin/test test/generators/scaffold_generator_test.rb:572
Finished in 3.646300s, 0.2743 runs/s, 0.5485 assertions/s.
1 runs, 2 assertions, 1 failures, 0 errors, 0 skips
$ |
|
Opened ruby/rubygems#9172 |
|
This issue will be resolved when RubyGems and Bundler 4.0.1 is released including ruby/rubygems#9167 |
|
Let me revisit this pull request later. |
|
RubyGems 4.0.1 has been released https://github.com/ruby/rubygems/releases/tag/v4.0.1 . Rebuilding the CI job https://buildkite.com/rails/buildkite-config/builds/488 |
|
These CIs are green.
While CI for 6-1-stable branches are red, that should not be relevant to this pull request. https://buildkite.com/rails/rails-ci/builds/338 I think we should bump the branch to some newer stable branch since Rails 6.1 is already EOL, I do not know how to do yet. |
Opened #154 |
This pull request addresses rails/rails#56325
Bundler has been included as a default gem since Ruby 2.6.
Rails 7.0, which is our oldest version in Rails CI, requires Ruby 2.7 or higher. This means all Ruby versions we test against already have Bundler pre-installed.
When
gem install bundleris run on our Rails Nightly CI, it creates a duplicate installation of bundler:gem install bundler: /usr/local/lib/ruby/gems/4.0.0+0/gems/bundler-4.0.0/This duplication causes constant redefinition warnings such as:
gem update --systemtakes care of upgrading not onlygemcommand but alsobundlercommand so we can use the latest available bundler command after removing thegem install bundler.References:
Ruby 2.6.0 Released: https://www.ruby-lang.org/en/news/2018/12/25/ruby-2-6-0-released/ "Bundler is now installed as a default gem."
Rails 7.0 requires Ruby 2.7+: https://github.com/rails/rails/blob/7-0-stable/rails.gemspec#L12
Rails CI against 6-1-stable branch https://buildkite.com/rails/rails/builds?branch=6-1-stable no longer runs since Oct 27 2025: https://buildkite.com/rails/rails/builds/123203/steps/canvas