From: ryan.rosenblum@... Date: 2017-06-28T20:57:44+00:00 Subject: [ruby-core:81820] [Ruby trunk Bug#13695] Issue with require and require_relative with symlinked directories Issue #13695 has been updated by rrosenblum (Ryan Rosenblum). [rspec-duplicate-require](https://github.com/wconrad/rspec-duplicate-require) shows that this behavior has been around for at least 4 years. More recent discussions of this have been going on in [prawn](https://github.com/prawnpdf/prawn/pull/1026) and [pdf-core](https://github.com/prawnpdf/pdf-core/issues/30). ---------------------------------------- Bug #13695: Issue with require and require_relative with symlinked directories https://bugs.ruby-lang.org/issues/13695#change-65515 * 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: