Skip to content

Bundler requires pathname eagerly and prevents using a newer version of the gem #9030

@eregon

Description

@eregon

Describe the problem as clearly as you can

Bundler loads Pathname early on, notably in


with
autoload :Pathname, "pathname"

This prevents using an installed pathname gem, and forces using the pathname stdlib always.

Did you try upgrading rubygems & bundler?

I'm using the latest Bundler, 2.7.2.

Post steps to reproduce the problem

$ cat Gemfile.lock 
GEM
  remote: https://rubygems.org/
  specs:
    pathname (0.4.0)

PLATFORMS
  ruby
  x86_64-linux

DEPENDENCIES
  pathname

BUNDLED WITH
   2.7.2
$ bundle install

As we can see stdlib pathname is unexpectedly used, even though the gem lib is earlier in $LOAD_PATH:

$ ruby -e 'require "bundler/setup"; require "pathname"; puts $".grep(/pathname/); puts; puts $:'                                                             
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0/x86_64-linux/pathname.so
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0/pathname.rb

/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib
/home/eregon/tmp/bundler-pathname/vendor/bundle/ruby/3.4.0/gems/pathname-0.4.0/lib
/home/eregon/tmp/bundler-pathname/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/pathname-0.4.0
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/site_ruby/3.4.0
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/site_ruby/3.4.0/x86_64-linux
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/site_ruby
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/vendor_ruby/3.4.0
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/vendor_ruby/3.4.0/x86_64-linux
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/vendor_ruby
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0/x86_64-linux

And this is because Bundler itself loads Pathname early:

$ ruby -e 'Kernel.prepend Module.new { def require(path); puts path, caller, nil if path.include?("pathname"); super; end }; require "bundler/setup"; require "pathname"; puts $".grep(/pathname/); puts; puts $:'
pathname
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/shared_helpers.rb:60:in 'block in Bundler::SharedHelpers#pwd'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/shared_helpers.rb:59:in 'Monitor#synchronize'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/shared_helpers.rb:59:in 'Bundler::SharedHelpers#pwd'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/shared_helpers.rb:281:in 'Bundler::SharedHelpers#search_up'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/shared_helpers.rb:268:in 'Bundler::SharedHelpers#find_file'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/shared_helpers.rb:260:in 'Bundler::SharedHelpers#find_gemfile'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/shared_helpers.rb:49:in 'Bundler::SharedHelpers#in_bundle?'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/setup.rb:5:in '<top (required)>'
<internal:/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0/rubygems/core_ext/kernel_require.rb>:136:in 'Kernel#require'
<internal:/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0/rubygems/core_ext/kernel_require.rb>:136:in 'Kernel#require'
-e:1:in 'require'
-e:1:in '<main>'

pathname.so
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0/pathname.rb:13:in '<top (required)>'
<internal:/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0/rubygems/core_ext/kernel_require.rb>:136:in 'Kernel#require'
<internal:/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0/rubygems/core_ext/kernel_require.rb>:136:in 'Kernel#require'
-e:1:in 'require'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/shared_helpers.rb:60:in 'block in Bundler::SharedHelpers#pwd'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/shared_helpers.rb:59:in 'Monitor#synchronize'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/shared_helpers.rb:59:in 'Bundler::SharedHelpers#pwd'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/shared_helpers.rb:281:in 'Bundler::SharedHelpers#search_up'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/shared_helpers.rb:268:in 'Bundler::SharedHelpers#find_file'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/shared_helpers.rb:260:in 'Bundler::SharedHelpers#find_gemfile'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/shared_helpers.rb:49:in 'Bundler::SharedHelpers#in_bundle?'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/setup.rb:5:in '<top (required)>'
<internal:/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0/rubygems/core_ext/kernel_require.rb>:136:in 'Kernel#require'
<internal:/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0/rubygems/core_ext/kernel_require.rb>:136:in 'Kernel#require'
-e:1:in 'require'
-e:1:in '<main>'

pathname
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler.rb:5:in '<top (required)>'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/setup.rb:6:in 'Kernel#require_relative'
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib/bundler/setup.rb:6:in '<top (required)>'
<internal:/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0/rubygems/core_ext/kernel_require.rb>:136:in 'Kernel#require'
<internal:/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0/rubygems/core_ext/kernel_require.rb>:136:in 'Kernel#require'
-e:1:in 'require'
-e:1:in '<main>'

pathname
-e:1:in '<main>'

/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0/x86_64-linux/pathname.so
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0/pathname.rb

/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0/gems/bundler-2.7.2/lib
/home/eregon/tmp/bundler-pathname/vendor/bundle/ruby/3.4.0/gems/pathname-0.4.0/lib
/home/eregon/tmp/bundler-pathname/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/pathname-0.4.0
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/site_ruby/3.4.0
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/site_ruby/3.4.0/x86_64-linux
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/site_ruby
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/vendor_ruby/3.4.0
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/vendor_ruby/3.4.0/x86_64-linux
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/vendor_ruby
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0
/home/eregon/.rubies/ruby-3.4.7/lib/ruby/3.4.0/x86_64-linux

If not included with the output of your command, run bundle env and paste the output below

Environment

Bundler       2.7.2
  Platforms   ruby, x86_64-linux
Ruby          3.4.7p58 (2025-10-08 revision 7a5688e2a27668e48f8d6ff4af5b2208b98a2f5e) [x86_64-linux]
  Full Path   /home/eregon/.rubies/ruby-3.4.7/bin/ruby
  Config Dir  /home/eregon/.rubies/ruby-3.4.7/etc
RubyGems      3.6.9
  Gem Home    /home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0
  Gem Path    /home/eregon/.gem/ruby/3.4.0:/home/eregon/.rubies/ruby-3.4.7/lib/ruby/gems/3.4.0
  User Home   /home/eregon
  User Path   /home/eregon/.gem/ruby/3.4.0
  Bin Dir     /home/eregon/.rubies/ruby-3.4.7/bin
Tools         
  Git         2.51.0
  RVM         not installed
  rbenv       not installed
  chruby      0.3.9

Bundler Build Metadata

Timestamp  2025-09-09
Git SHA    b463ced1459

Bundler settings

path
  Set for the current user (/home/eregon/.bundle/config): "vendor/bundle"

Gemfile

Gemfile

source "https://rubygems.org"

gem "pathname"

Gemfile.lock

GEM
  remote: https://rubygems.org/
  specs:
    pathname (0.4.0)

PLATFORMS
  ruby
  x86_64-linux

DEPENDENCIES
  pathname

BUNDLED WITH
   2.7.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions