Project

General

Profile

Actions

Bug #16462

closed

Ruby 2.7 autoload not working with $RUBYLIB (maybe circular dependency error)

Bug #16462: Ruby 2.7 autoload not working with $RUBYLIB (maybe circular dependency error)

Added by zw963 (Wei Zheng) almost 6 years ago. Updated over 5 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
2.7.0
[ruby-core:96544]
Tags:

Description

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)
 ╭─ 17:41 zw963 ⮀ ~ ⮀ ➦ ruby-2.7.0 ╰─ $ echo $RUBYLIB /home/zw963/Dropbox/common/ruby/lib 
  1. Following is my directory content for my ~/Dropbox/common/ruby/lib, code is working.
 ╰─ $ 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 
  1. let us run Irb, puts $LOAD_PATH, and require 'looksee'
 ╭─ 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> 
  1. the reason cause this is, i guess, following code is not working, some circular dependency was happen.
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

  1. if require "looksee/adapter" directly, it working.
 ╰─ $ RUBYOPT= irb -f irb(main):001:0> require 'looksee/adapter' => true 

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

 ╰─ $ 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


Files


Related issues 1 (0 open1 closed)

Updated by zw963 (Wei Zheng) almost 6 years ago Actions #1

  • Description updated (diff)

Updated by mame (Yusuke Endoh) almost 6 years ago Actions #2 [ruby-core:96545]

Unfortunately, I cannot reproduce the issue. To isolate the problem, could you uninstall "looksee" gem and check if the issue is still reproducible with other gems that use autoload?

$ gem install looksee Building native extensions. This could take a while... Successfully installed looksee-4.2.0 Parsing documentation for looksee-4.2.0 Done installing documentation for looksee after 0 seconds 1 gem installed $ tree ~/local/lib/ruby/gems/2.7.0/gems/looksee-4.2.0/lib/ /home/mame/local/lib/ruby/gems/2.7.0/gems/looksee-4.2.0/lib/ ├── looksee │   ├── adapter │   │   ├── base.rb │   │   └── rubinius.rb │   ├── adapter.rb │   ├── clean.rb │   ├── columnizer.rb │   ├── core_ext.rb │   ├── editor.rb │   ├── help.rb │   ├── inspector.rb │   ├── lookup_path.rb │   ├── mri.so │   └── version.rb └── looksee.rb 2 directories, 13 files $ RUBYLIB=~/local/lib/ruby/gems/2.7.0/gems/looksee-4.2.0/lib/ irb -f irb(main):001:0> puts $LOAD_PATH /home/mame/local/lib/ruby/gems/2.7.0/gems/looksee-4.2.0/lib/ /home/mame/local/lib/ruby/site_ruby/2.7.0 /home/mame/local/lib/ruby/site_ruby/2.7.0/x86_64-linux /home/mame/local/lib/ruby/site_ruby /home/mame/local/lib/ruby/vendor_ruby/2.7.0 /home/mame/local/lib/ruby/vendor_ruby/2.7.0/x86_64-linux /home/mame/local/lib/ruby/vendor_ruby /home/mame/local/lib/ruby/2.7.0 /home/mame/local/lib/ruby/2.7.0/x86_64-linux => nil irb(main):002:0> require "looksee" => true irb(main):003:0> Looksee::Adapter => Looksee::Adapter irb(main):004:0> 

Updated by zw963 (Wei Zheng) almost 6 years ago Actions #3 [ruby-core:96553]

mame (Yusuke Endoh) wrote:

Unfortunately, I cannot reproduce the issue. To isolate the problem, could you uninstall "looksee" gem and check if the issue is still reproducible with other gems that use autoload?

$ gem install looksee Building native extensions. This could take a while... Successfully installed looksee-4.2.0 Parsing documentation for looksee-4.2.0 Done installing documentation for looksee after 0 seconds 1 gem installed $ tree ~/local/lib/ruby/gems/2.7.0/gems/looksee-4.2.0/lib/ /home/mame/local/lib/ruby/gems/2.7.0/gems/looksee-4.2.0/lib/ ├── looksee │   ├── adapter │   │   ├── base.rb │   │   └── rubinius.rb │   ├── adapter.rb │   ├── clean.rb │   ├── columnizer.rb │   ├── core_ext.rb │   ├── editor.rb │   ├── help.rb │   ├── inspector.rb │   ├── lookup_path.rb │   ├── mri.so │   └── version.rb └── looksee.rb 2 directories, 13 files $ RUBYLIB=~/local/lib/ruby/gems/2.7.0/gems/looksee-4.2.0/lib/ irb -f irb(main):001:0> puts $LOAD_PATH /home/mame/local/lib/ruby/gems/2.7.0/gems/looksee-4.2.0/lib/ /home/mame/local/lib/ruby/site_ruby/2.7.0 /home/mame/local/lib/ruby/site_ruby/2.7.0/x86_64-linux /home/mame/local/lib/ruby/site_ruby /home/mame/local/lib/ruby/vendor_ruby/2.7.0 /home/mame/local/lib/ruby/vendor_ruby/2.7.0/x86_64-linux /home/mame/local/lib/ruby/vendor_ruby /home/mame/local/lib/ruby/2.7.0 /home/mame/local/lib/ruby/2.7.0/x86_64-linux => nil irb(main):002:0> require "looksee" => true irb(main):003:0> Looksee::Adapter => Looksee::Adapter irb(main):004:0> 

Sorry, i am describe not clear.

I am not use gem install looksee way to install gem, because i need "looksee" gem can be
requireable for my all ruby version, my all ruby project, or any ???.rb file.

following is my process:

  1. copy all gem's file into /home/zw963/Dropbox/common/ruby/lib

cd /home/zw963/Dropbox/common/ruby/lib, assume we get following file list.

╰─ $ 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

  1. Add /home/zw963/Dropbox/common/ruby/lib into $RUBYLIB ENV.

  2. require "looksee" in irb or any ruby file directly, please see following $LOAD_PATH.

irb(main):001:0> puts $LOAD_PATH /home/zw963/Dropbox/common/ruby/lib # <= Please see this first one. /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 

In fact, when i do "require "looksee"', i want to require this:

/home/zw963/Dropbox/common/ruby/lib/looksee.rb 

i thought many portable/independent ruby program need work this way, right?
e.g. traveling_ruby

  1. Above solution work well since 2.0.0, until update to 2.6.x, all working very well.
    but not working for Ruby 2.7.0

I guess maybe some change for new #require method, or #autoload, broken this.

Thank you.

Updated by zw963 (Wei Zheng) almost 6 years ago Actions #4

  • ruby -v set to 2.7.0

Updated by zw963 (Wei Zheng) almost 6 years ago Actions #5 [ruby-core:96856]

Any update for this?

Updated by zw963 (Wei Zheng) over 5 years ago Actions #6 [ruby-core:97408]

Sorry for confusing, i find the really reason caused this issue, i will create a new issue #16680 for make reproduce more clearly.

I don't know how to close this issue, can you help on this?

Updated by hsbt (Hiroshi SHIBATA) over 5 years ago Actions #7

  • Related to Bug #16680: Symlink folder in $LOAD_PATH does not work with autoload added

Updated by hsbt (Hiroshi SHIBATA) over 5 years ago Actions #8

  • Status changed from Open to Closed
Actions

Also available in: PDF Atom