fxn / zeitwerk

Efficient and thread-safe code loader for Ruby
MIT License
1.98k stars 118 forks source link

loading in progress, circular require considered harmful #191

Closed zw963 closed 2 years ago

zw963 commented 2 years ago

When i run test on one of my project, get following warning message.

/home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/zeitwerk-2.5.1/lib/zeitwerk/kernel.rb:35: warning: /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/zeitwerk-2.5.1/lib/zeitwerk/kernel.rb:35: warning: loading in progress, circular require considered harmful - /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/opal-sprockets-1.0.2/lib/opal/sprockets.rb
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/rake-13.0.6/lib/rake/rake_test_loader.rb:6:in  `<main>'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/rake-13.0.6/lib/rake/rake_test_loader.rb:6:in  `select'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/rake-13.0.6/lib/rake/rake_test_loader.rb:21:in  `block in <main>'
        from <internal:/home/zw963/others/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in  `require'
        from <internal:/home/zw963/others/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in  `require'
        from /home/zw963/Stocks/marketbet_crawler/test/graphql/stocks/stock_test.rb:1:in  `<top (required)>'
        from <internal:/home/zw963/others/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in  `require'
        from <internal:/home/zw963/others/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in  `require'
        from /home/zw963/Stocks/marketbet_crawler/test/test_helper.rb:17:in  `<top (required)>'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/rack-2.2.3/lib/rack/builder.rb:66:in  `parse_file'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/rack-2.2.3/lib/rack/builder.rb:105:in  `load_file'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/rack-2.2.3/lib/rack/builder.rb:116:in  `new_from_string'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/rack-2.2.3/lib/rack/builder.rb:116:in  `eval'
        from config.ru:1:in  `block in <main>'
        from config.ru:1:in  `require_relative'
        from /home/zw963/Stocks/marketbet_crawler/config/environment.rb:5:in  `<top (required)>'
        from /home/zw963/others/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/bundler.rb:174:in  `require'
        from /home/zw963/others/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/bundler/runtime.rb:50:in  `require'
        from /home/zw963/others/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/bundler/runtime.rb:50:in  `each'
        from /home/zw963/others/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/bundler/runtime.rb:61:in  `block in require'
        from /home/zw963/others/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/bundler/runtime.rb:61:in  `each'
        from /home/zw963/others/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/bundler/runtime.rb:66:in  `block (2 levels) in require'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/zeitwerk-2.5.1/lib/zeitwerk/kernel.rb:35:in  `require'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/zeitwerk-2.5.1/lib/zeitwerk/kernel.rb:35:in  `require'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/opal-sprockets-1.0.2/lib/opal-sprockets.rb:1:in  `<top (required)>'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/zeitwerk-2.5.1/lib/zeitwerk/kernel.rb:35:in  `require'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/zeitwerk-2.5.1/lib/zeitwerk/kernel.rb:35:in  `require'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/opal-sprockets-1.0.2/lib/opal/sprockets.rb:4:in  `<top (required)>'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/opal-sprockets-1.0.2/lib/opal/sprockets.rb:5:in  `<module:Opal>'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/opal-sprockets-1.0.2/lib/opal/sprockets.rb:11:in  `<module:Sprockets>'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/zeitwerk-2.5.1/lib/zeitwerk/kernel.rb:35:in  `require'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/zeitwerk-2.5.1/lib/zeitwerk/kernel.rb:35:in  `require'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/opal-sprockets-1.0.2/lib/opal/sprockets/environment.rb:2:in  `<top (required)>'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/zeitwerk-2.5.1/lib/zeitwerk/kernel.rb:35:in  `require'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/zeitwerk-2.5.1/lib/zeitwerk/kernel.rb:35:in  `require'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/opal-sprockets-1.0.2/lib/opal/sprockets/processor.rb:6:in  `<top (required)>'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/zeitwerk-2.5.1/lib/zeitwerk/kernel.rb:35:in  `require'
        from /home/zw963/others/.rvm/gems/ruby-3.0.2@marketbet_crawler/gems/zeitwerk-2.5.1/lib/zeitwerk/kernel.rb:35:in  `require'

I an not sure if i should create issue o zeitwerk or opal-sprockets, anyway, let me do confirm this here first.

this is a my public project, https://github.com/zw963/marketbet_crawler

I you think it needed, i can offer more useful detail for how to run rake test on it.

Thank you.

I run this test on ruby 3.0.2

 ╰─ $ bundle list |egrep 'zeitwerk|rack-test|opal-sprockets'
  * opal-sprockets (1.0.2)
  * rack-test (1.1.0)
  * zeitwerk (2.5.1)
fxn commented 2 years ago

opal-sprockets does not use Zeitwerk. Those seem like regular circular require Ruby warnings.

You see "zeitwerk" in the logs because all require calls pass through this thin wrapper.

fxn commented 2 years ago

I have seen a circularity in the lib, explained in https://github.com/opal/opal-sprockets/issues/27. Closing.