From: matt@... Date: 2017-06-28T19:41:49+00:00 Subject: [ruby-core:81819] [Ruby trunk Bug#13695] Issue with require and require_relative with symlinked directories Issue #13695 has been reported by fidothe (Matt Patterson). ---------------------------------------- Bug #13695: Issue with require and require_relative with symlinked directories https://bugs.ruby-lang.org/issues/13695 * Author: fidothe (Matt Patterson) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16] * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- Symlinked directories cause an issue with require_relative where libraries loaded from a symlinked path (e.g. in a typical Capistrano / Bundler deployment) can be double-loaded. Reproduce process: 1. Clone git repo from https://github.com/fidothe/symlink-require 2. Run `use-symlink.rb` script: ~~~ bash $ ruby use-symlink.rb ~~~ Expected result: No warning from double-loading of constants issued. Actual result: double-loading of file causing already-initialised constant warning. In the example I linked above, `target.rb` uses `require_relative` to load `dependent.rb`. When the example also requires `dependent.rb` the file is double-loaded and we see a warning about already-initialized constant. The problem is that when `require` in `use-symlink.rb` (line 7) checks the set of loaded files it uses an absolute path containing the symlink (since that is what was added to $LOAD_PATH), but when `require_relative` in target.rb is called, it uses an absolute path containing target of the symlink, causing the double-load. Is this discrepancy intended behaviour on Ruby's part? -- https://bugs.ruby-lang.org/ Unsubscribe: