Skip to content
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

"circular require" warning emitted when using a bundler cache #7611

Closed
flavorjones opened this issue Apr 25, 2024 · 2 comments · Fixed by #7612
Closed

"circular require" warning emitted when using a bundler cache #7611

flavorjones opened this issue Apr 25, 2024 · 2 comments · Fixed by #7612
Labels

Comments

@flavorjones
Copy link
Contributor

flavorjones commented Apr 25, 2024

Describe the problem as clearly as you can

Starting with commit bbe4da0 (bundler v2.5.8), I see warnings emitted when using a bundler cache and requiring "rubygems".

For example, when running tests in the sparklemotion/sqlite3-ruby repository with bundler 2.5.8 or later:

/home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems/package.rb:10: warning: /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems/package.rb:10: warning: loading in progress, circular require considered harmful - /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems.rb
        from <internal:gem_prelude>:2:in  `<internal:gem_prelude>'
        from <internal:gem_prelude>:2:in  `require'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems.rb:1382:in  `<top (required)>'
        from <internal:/home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:136:in  `require'
        from <internal:/home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:136:in  `require'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/setup.rb:10:in  `<top (required)>'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/ui/shell.rb:111:in  `silence'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/ui/shell.rb:159:in  `with_level'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/setup.rb:10:in  `block in <top (required)>'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler.rb:162:in  `setup'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/runtime.rb:18:in  `setup'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/definition.rb:270:in  `specs_for'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/definition.rb:203:in  `specs'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/definition.rb:579:in  `materialize'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/spec_set.rb:121:in  `materialize'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/spec_set.rb:22:in  `for'
        from <internal:kernel>:187:in  `loop'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/spec_set.rb:34:in  `block in for'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/spec_set.rb:281:in  `specs_for_dependency'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/spec_set.rb:281:in  `map!'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/lazy_specification.rb:97:in  `materialize_for_installation'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/source/rubygems.rb:136:in  `specs'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/source/rubygems.rb:392:in  `cached_specs'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/source/rubygems.rb:392:in  `each'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/source/rubygems.rb:393:in  `block in cached_specs'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/rubygems_integration.rb:168:in  `spec_from_gem'
        from <internal:/home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:136:in  `require'
        from <internal:/home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:136:in  `require'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems/package.rb:10:in  `<top (required)>'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems/package.rb:10:in  `require_relative'

I don't see this warning if I use an earlier version of bundler or if I delete the vendor/ directory which stores the cache.

Did you try upgrading rubygems & bundler?

Yes, this issue is present in 2.5.8 and 2.5.9 (but not in earlier versions). I've bisected the behavior to bbe4da0.

Post steps to reproduce the problem

Start with an empty directory. Create a Gemfile:

source "https://rubygems.org"

gem "minitest"
  • run bundle install
  • run bundle exec ruby -w -e "require 'rubygems'"
  • see that there are no warnings emitted
  • run bundle package
  • run bundle exec ruby -w -e "require 'rubygems'"
  • see that there are warnings emitted

On my system, the warning messages I see in this scenario are:

/home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems/package.rb:10: warning: /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems/package.rb:10: warning: loading in progress, circular require considered harmful - /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems.rb
        from <internal:gem_prelude>:2:in  `<internal:gem_prelude>'
        from <internal:gem_prelude>:2:in  `require'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems.rb:1382:in  `<top (required)>'
        from <internal:/home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:136:in  `require'
        from <internal:/home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:136:in  `require'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/setup.rb:10:in  `<top (required)>'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/ui/shell.rb:111:in  `silence'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/ui/shell.rb:159:in  `with_level'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/setup.rb:10:in  `block in <top (required)>'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler.rb:162:in  `setup'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/runtime.rb:18:in  `setup'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/definition.rb:270:in  `specs_for'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/definition.rb:203:in  `specs'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/definition.rb:579:in  `materialize'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/spec_set.rb:121:in  `materialize'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/spec_set.rb:22:in  `for'
        from <internal:kernel>:187:in  `loop'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/spec_set.rb:34:in  `block in for'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/spec_set.rb:281:in  `specs_for_dependency'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/spec_set.rb:281:in  `map!'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/lazy_specification.rb:97:in  `materialize_for_installation'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/source/rubygems.rb:136:in  `specs'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/source/rubygems.rb:392:in  `cached_specs'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/source/rubygems.rb:392:in  `each'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/source/rubygems.rb:393:in  `block in cached_specs'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.9/lib/bundler/rubygems_integration.rb:168:in  `spec_from_gem'
        from <internal:/home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:136:in  `require'
        from <internal:/home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:136:in  `require'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems/package.rb:10:in  `<top (required)>'
        from /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/site_ruby/3.3.0/rubygems/package.rb:10:in  `require_relative'

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

Environment

Bundler       2.5.9
  Platforms   ruby, x86_64-linux
Ruby          3.3.0p0 (2023-12-25 revision 5124f9ac7513eb590c37717337c430cb93caa151) [x86_64-linux]
  Full Path   /home/flavorjones/.rbenv/versions/3.3.0/bin/ruby
  Config Dir  /home/flavorjones/.rbenv/versions/3.3.0/etc
RubyGems      3.5.9
  Gem Home    /home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0
  Gem Path    /home/flavorjones/.gem/ruby/3.3.0:/home/flavorjones/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0
  User Home   /home/flavorjones
  User Path   /home/flavorjones/.gem/ruby/3.3.0
  Bin Dir     /home/flavorjones/.rbenv/versions/3.3.0/bin
Tools         
  Git         2.40.1
  RVM         not installed
  rbenv       rbenv 1.2.0-87-ge8b7a27e
  chruby      not installed

Bundler Build Metadata

Built At          2024-04-12
Git SHA           4304697e0c
Released Version  true

Bundler settings

cache_all
  Set for your local app (/home/flavorjones/tmp/bundler-circular-require/.bundle/config): false
gem.changelog
  Set for the current user (/home/flavorjones/.bundle/config): true
gem.ci
  Set for the current user (/home/flavorjones/.bundle/config): "github"
gem.linter
  Set for the current user (/home/flavorjones/.bundle/config): "standard"
gem.test
  Set for the current user (/home/flavorjones/.bundle/config): "minitest"
jobs
  Set for the current user (/home/flavorjones/.bundle/config): 4

Gemfile

Gemfile
source "https://rubygems.org"

gem "minitest"
Gemfile.lock
GEM
  remote: https://rubygems.org/
  specs:
    minitest (5.22.3)

PLATFORMS
  ruby
  x86_64-linux

DEPENDENCIES
  minitest

BUNDLED WITH
   2.5.9
@deivid-rodriguez
Copy link
Member

Thanks for the nice repro and bisection @flavorjones. Fixing this at #7612. To avoid the warning, a RubyGems upgrade will be needed, I think that's fine?

@flavorjones
Copy link
Contributor Author

@deivid-rodriguez Nice! Seems like an easy fix 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
2 participants