Project

General

Profile

Bug #16462

Updated by zw963 (Wei Zheng) almost 2 years ago

I don't know how to exactly describe this issue, following is try to reproduce. 

 We can use a gem named "looksee", it was supported ruby 2.7 ready. 
 same issue happen on several gem,    looksee is just for a sample for describe this issue. 


 1) i change $RUBYLIB ENV    locally for use some gem easy. (globally used by all my own local project) 

 ```sh 
  ╭─ 17:41    zw963 ⮀ ~ ⮀ ➦ ruby-2.7.0 
  ╰─ $ echo $RUBYLIB 
 /home/zw963/Dropbox/common/ruby/lib 
 ``` 

 2) Following is my directory content for my ~/Dropbox/common/ruby/lib, code is working. 

 ```sh 
  ╰─ $ tree 
 looksee.rb 
 looksee 
 ├── adapter 
 │   ├── base.rb 
 │   └── rubinius.rb 
 ├── adapter.rb 
 ├── clean.rb 
 ├── columnizer.rb 
 ├── core_ext.rb 
 ├── editor.rb 
 ├── help.rb 
 ├── inspector.rb 
 ├── JRuby.jar 
 ├── lookup_path.rb 
 ├── mri.2.1.0.so 
 ├── mri.2.2.0.so 
 ├── mri.2.3.0.so 
 ├── mri.2.4.0.so 
 ├── mri.2.5.0.so 
 ├── mri.2.6.0.so 
 ├── mri.2.7.0.so 
 └── version.rb 
 ``` 

 3) let us run Irb, puts $LOAD_PATH, and require 'looksee' 

 ```sh 
  ╭─ 17:52    zw963 ⮀ ~/Dropbox/common/ruby/lib ⮀ ⭠ (f99118fef) test *$%    ➦ ruby-2.7.0 
  ╰─ $ RUBYOPT= irb -f 
 irb(main):001:0> puts $LOAD_PATH 
 /home/zw963/Dropbox/common/ruby/lib 
 /home/zw963/.rvm/rubies/ruby-2.7.0/lib/ruby/site_ruby/2.7.0 
 /home/zw963/.rvm/rubies/ruby-2.7.0/lib/ruby/site_ruby/2.7.0/x86_64-linux 
 /home/zw963/.rvm/rubies/ruby-2.7.0/lib/ruby/site_ruby 
 /home/zw963/.rvm/rubies/ruby-2.7.0/lib/ruby/vendor_ruby/2.7.0 
 /home/zw963/.rvm/rubies/ruby-2.7.0/lib/ruby/vendor_ruby/2.7.0/x86_64-linux 
 /home/zw963/.rvm/rubies/ruby-2.7.0/lib/ruby/vendor_ruby 
 /home/zw963/.rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0 
 /home/zw963/.rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/x86_64-linux 
 => nil 
 irb(main):002:0> require 'looksee' 
 Traceback (most recent call last): 
        15: from /home/zw963/.rvm/rubies/ruby-2.7.0/bin/irb:23:in `<main>' 
        14: from /home/zw963/.rvm/rubies/ruby-2.7.0/bin/irb:23:in `load' 
        13: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/gems/2.7.0/gems/irb-1.2.1/exe/irb:11:in `<top (required)>' 
        12: from (irb):2 
        11: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require' 
        10: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require' 
         9: from /home/zw963/Dropbox/common/ruby/lib/looksee.rb:1:in `<top (required)>' 
         8: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require' 
         7: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require' 
         6: from /home/zw963/Dropbox/common/ruby/lib/looksee/clean.rb:4:in `<top (required)>' 
         5: from /home/zw963/Dropbox/common/ruby/lib/looksee/clean.rb:171:in `<module:Looksee>' 
         4: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require' 
         3: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require' 
         2: from /home/zw963/Dropbox/common/ruby/lib/looksee/adapter.rb:1:in `<top (required)>' 
         1: from /home/zw963/Dropbox/common/ruby/lib/looksee/adapter.rb:2:in `<module:Looksee>' 
 NameError (uninitialized constant Looksee::Adapter) 
 irb(main):003:0> 
 irb(main):002:0> 
 ``` 

 4) the reason cause this is, i guess, following code is not working, some **circular dependency** was happen. 

 ```rb 
 module Looksee 
   ... 
   autoload :Adapter, 'looksee/adapter' 
   ... 
 end 
 ``` 

 Please check the source code here: 
 https://github.com/oggy/looksee/blob/master/lib/looksee/clean.rb#L12 


 5) if ``require "looksee/adapter"`` directly, it working. 

 ```rb 
  ╰─ $ RUBYOPT= irb -f 
 irb(main):001:0> require 'looksee/adapter' 
 => true 
 ``` 

 But, if ``require "looksee"`` first, then ``require "looksee/adapter"``, still broken. 

 ```sh 
  ╰─ $ RUBYOPT= irb -f 
 irb(main):001:0> require 'looksee' 
 Traceback (most recent call last): 
        15: from /home/zw963/.rvm/rubies/ruby-2.7.0/bin/irb:23:in `<main>' 
        14: from /home/zw963/.rvm/rubies/ruby-2.7.0/bin/irb:23:in `load' 
        13: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/gems/2.7.0/gems/irb-1.2.1/exe/irb:11:in `<top (required)>' 
        12: from (irb):1 
        11: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require' 
        10: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require' 
         9: from /home/zw963/Dropbox/common/ruby/lib/looksee.rb:1:in `<top (required)>' 
         8: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require' 
         7: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require' 
         6: from /home/zw963/Dropbox/common/ruby/lib/looksee/clean.rb:4:in `<top (required)>' 
         5: from /home/zw963/Dropbox/common/ruby/lib/looksee/clean.rb:171:in `<module:Looksee>' 
         4: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require' 
         3: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require' 
         2: from /home/zw963/Dropbox/common/ruby/lib/looksee/adapter.rb:1:in `<top (required)>' 
         1: from /home/zw963/Dropbox/common/ruby/lib/looksee/adapter.rb:2:in `<module:Looksee>' 
 NameError (uninitialized constant Looksee::Adapter) 
 irb(main):002:0> require 'looksee/adapter' 
 Traceback (most recent call last): 
         9: from /home/zw963/.rvm/rubies/ruby-2.7.0/bin/irb:23:in `<main>' 
         8: from /home/zw963/.rvm/rubies/ruby-2.7.0/bin/irb:23:in `load' 
         7: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/gems/2.7.0/gems/irb-1.2.1/exe/irb:11:in `<top (required)>' 
         6: from (irb):1 
         5: from (irb):2:in `rescue in irb_binding' 
         4: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require' 
         3: from /home/zw963/others/.rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require' 
         2: from /home/zw963/Dropbox/common/ruby/lib/looksee/adapter.rb:1:in `<top (required)>' 
         1: from /home/zw963/Dropbox/common/ruby/lib/looksee/adapter.rb:2:in `<module:Looksee>' 
 NameError (uninitialized constant Looksee::Adapter) 
 irb(main):003:0> 
 ``` 

  BTW: this issue never happen on ruby which version below 2.7.0 

Back