Symlinked vendor/bundle results in double load errors since:
- rails adds the realpath of each engines lib (and various other folders) to the $LOAD_PATH
- bundler adds the symlinked version to the $LOAD_PATH
- require_relative uses the realpath
which looks like: `already initialized constant Arturo::Middleware::MISSING_FEATURE_ERROR`
Reproduce:
- bundle install –path vendor/bundle
- mv vendor/bundle tmp
- cd vendor && ln -s ../tmp/bundle bundle
- enable eager_load + preload_frameworks in config/environment/development.rb
- rails runner 1
Patch:
# Gemfile require_relative 'lib/bundler_realpath' # lib/bundler_realpath.rb # https://grosser.it/2017/08/19/bundler-rails-realpath-expand_path-and-symlinked-vendorbundle-cause-already-loaded-errors Bundler::Runtime.prepend(Module.new do def setup(*) super ensure linked_bundle = File.expand_path(Bundler.bundle_path) real_bundle = File.realpath(Bundler.bundle_path) if linked_bundle != real_bundle $LOAD_PATH.each_with_index do |path, i| $LOAD_PATH[i] = path.sub(linked_bundle, real_bundle) end end end end)