autoload Can't Require Gems
Is it intentional that when used via
require can't handle Gem names?
run@desktop:~/mir/ruby$ → ruby -e 'p require "nokogiri"' true run@desktop:~/mir/ruby$ → ruby -e 'autoload(:N, "nokogiri"); p N' -e:1:in `<main>': cannot load such file -- nokogiri (LoadError)
Updated by drbrain (Eric Hodel) over 7 years ago
- Assignee changed from drbrain (Eric Hodel) to nahi (Hiroshi Nakamura)
If I'm reading load.c correctly, autoload_provided() uses rb_feature_provided() which checks $LOAD_PATH only. This will cause autoload to fail if the gem has not been activated yet.
If autoload's specification only allows autoloading from $LOAD_PATH this is not a bug. The documentation for Kernel#autoload does not say how the file will be loaded, but Module#autoload says:
Registers filename to be loaded (using Kernel::require) the first
time that module (which may be a String or a symbol) is accessed
in the namespace of mod.
Which implies it is a bug. Perhaps this documentation is wrong.
Since nahi is the autoload expert, I have assigned this back to him.