[ruby-core:99649] [Ruby master Bug#10222] require_relative and require should be compatible with each other when symlinks are used
From:
connor@...
Date:
2020-08-19 20:39:54 UTC
List:
ruby-core #99649
Issue #10222 has been updated by greneholt (Connor McKay).
I recently encountered this issue on v2.7.1, when symlinked directories were included in the $RUBYLIB environment variable. I was not experiencing the issue on v2.5.1 with the exact same setup however. Has the bug regressed, or was $RUBYLIB never handled by this fix to begin with?
----------------------------------------
Bug #10222: require_relative and require should be compatible with each other when symlinks are used
https://bugs.ruby-lang.org/issues/10222#change-87131
* Author: rosenfeld (Rodrigo Rosenfeld Rosas)
* Status: Closed
* Priority: Normal
* ruby -v: 2.3.1, 2.1.2p95
* Backport: 2.3: REQUIRED, 2.4: DONE, 2.5: DONTNEED
----------------------------------------
Not sure if this should be considered a bug or a feature request since I don't know whether the current behavior is intended or not.
Recently I got a report for my gem rails-web-console related to require_relative causing trouble with symlinked dirs:
https://github.com/rosenfeld/active_record_migrations/issues/6
Dmitry was able to replicate the issue using vanilla Ruby:
~~~
mkdir a
ln -s a b
echo "require_relative 'b'" > a/a.rb
echo "p 'b loaded'" > a/b.rb
echo "$: << File.expand_path('../b', __FILE__); require 'a'; require 'b'" > c.rb
ruby c.rb
~~~
Notice how "b loaded" is printed twice but if you replace require_relative with require it's just loaded once.
Shouldn't Ruby always expand the loaded files before appending them to the $LOADED_FEATURES and avoid this kind of error? I don't think require_relative should behave differently than a regular require in such cases.
Any thoughts?
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>