Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cannot load such file -- bundler/dep_proxy #1383

Closed
thbar opened this issue Jul 5, 2018 · 14 comments
Closed

cannot load such file -- bundler/dep_proxy #1383

thbar opened this issue Jul 5, 2018 · 14 comments
Assignees
Milestone

Comments

@thbar
Copy link
Contributor

thbar commented Jul 5, 2018

Environment: Mac OS X 10.13, llvm@4, truffleruby 1.0.0-rc3 installed via RVM.

When installing truffleruby via RVM, initially I'll get an error when running a rake task, but reinstalling bundler (with the same version, apparently!) seems to fix the issue.

I've seen this on 2 different computers.

Here is the full log

$ rvm install truffleruby
# EDIT: the warning below is caused by llvm path prepending I think
Warning! PATH is not properly set up, /Users/thbar/.rvm/gems/ruby-2.5.0/bin is not at first place.
         Usually this is caused by shell initialization files. Search for PATH=... entries.
         You can also re-add RVM to your profile by running: rvm get stable --auto-dotfiles
         To fix it temporarily in this shell session run: rvm use ruby-2.5.0
         To ignore this error add rvm_silence_path_mismatch_check_flag=1 to your ~/.rvmrc file.
Searching for binary rubies, this might take some time.
No binary rubies available for: osx/10.13/x86_64/truffleruby-1.0.0-rc3.
Continuing with compilation. Please read 'rvm help mount' to get more information on binary rubies.
Checking requirements for osx.
Certificates bundle '/usr/local/etc/openssl/cert.pem' is already up to date.
Requirements installation successful.
truffleruby-1.0.0-rc3 - #downloading truffleruby-1.0.0-rc3-macos-amd64, this may take a while depending on your connection...
** Resuming transfer from byte position 16056320
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   630    0   630    0     0    835      0 --:--:-- --:--:-- --:--:--   836
100 26.1M  100 26.1M    0     0  1453k      0  0:00:18  0:00:18 --:--:-- 1529k
truffleruby-1.0.0-rc3 - #extracting truffleruby-1.0.0-rc3-macos-amd64 to /Users/thbar/.rvm/src/truffleruby-1.0.0-rc3.....
truffleruby-1.0.0-rc3 - #installing to /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3.
truffleruby-1.0.0-rc3 - #compiling c-extensions...............
truffleruby-1.0.0-rc3 - #making binaries executable..
truffleruby-1.0.0-rc3 - #gemset created /Users/thbar/.rvm/gems/truffleruby-1.0.0-rc3@global
truffleruby-1.0.0-rc3 - #importing gemset /Users/thbar/.rvm/gemsets/global.gems...................................................
truffleruby-1.0.0-rc3 - #generating global wrappers.......
truffleruby-1.0.0-rc3 - #gemset created /Users/thbar/.rvm/gems/truffleruby-1.0.0-rc3
truffleruby-1.0.0-rc3 - #importing gemsetfile /Users/thbar/.rvm/gemsets/default.gems evaluated to empty gem list
truffleruby-1.0.0-rc3 - #generating default wrappers.......
✔ ~/git/kiba [master|⚑ 2] 
20:14 $ cd .
✔ ~/git/kiba [master|⚑ 2] 
20:15 $ ruby -v
truffleruby 1.0.0-rc3, like ruby 2.4.4, GraalVM CE Native [x86_64-darwin]
✔ ~/git/kiba [master|⚑ 2] 
20:15 $ bundle exec rake
spawn_setup: close_others not yet implemented
/Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:893:in `block (2 levels) in expand_dependencies': cannot load such file -- bundler/dep_proxy (LoadError)
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:892:in `each'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:892:in `block in expand_dependencies'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:879:in `each'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:879:in `expand_dependencies'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:809:in `converge_locked_specs'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:248:in `resolve'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:171:in `specs'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:238:in `specs_for'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:227:in `requested_specs'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/runtime.rb:108:in `send'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/runtime.rb:108:in `requested_specs'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/runtime.rb:20:in `setup'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/patches/bundler/bundler/runtime.rb:9:in `setup'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler.rb:107:in `setup'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/setup.rb:10:in `<top (required)>'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri/rubygems/core_ext/kernel_require.rb:133:in `gem_original_require'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri/rubygems/core_ext/kernel_require.rb:133:in `require'
	from /Users/thbar/.rvm/rubies/truffleruby-1.0.0-rc3/lib/truffle/truffle/lazy-rubygems.rb:23:in `require'
	from /Users/thbar/.rvm/gems/truffleruby-1.0.0-rc3@global/bin/truffleruby_executable_hooks:1:in `<main>'
✘-1 ~/git/kiba [master|⚑ 2] 
20:15 $ gem --version
2.6.14.1
✔ ~/git/kiba [master|⚑ 2] 
20:15 $ bundler --version
Bundler version 1.16.2
✔ ~/git/kiba [master|⚑ 2] 
20:15 $ gem install bundler
Fetching: bundler-1.16.2.gem (100%)
Successfully installed bundler-1.16.2
1 gem installed
✔ ~/git/kiba [master|⚑ 2] 
20:17 $ bundle exec rake
# EDIT: this time nothing unexpected
spawn_setup: close_others not yet implemented
Could not find rake-12.3.0 in any of the sources
Run `bundle install` to install missing gems.
@eregon
Copy link
Member

eregon commented Jul 5, 2018

Hello,
Thank you for the report!

EDIT: the warning below is caused by llvm path prepending I think

Prepending LLVM to PATH will no longer be necessary for macOS in the next release :)

I think this is essentially a problem of RVM or a bad interaction between RVM and TruffleRuby.

This warning might be part of the problem but it's really a guess.
I guess RVM might prefer if PATH is modified before source-ing RVM.
This might fix the warning.

Do you have a file ~/.rvm/gemsets/truffleruby/global.gems ? (it seems not from the output above, so good)
I had this locally, because some older version of RVM had it, but it was removed on master, yet rvm get head did not remove it.
As a consequence bundler was not installed, and I had to remove the file, for bundler to be automatically installed by rvm install truffleruby (due to using ~/.rvm/gemsets/global.gems instead).
That's a bug of RVM: rvm/rvm#4434

I can reproduce your issue on Linux with latest RVM (which recently installs bundler automatically again), although I get a slightly different error.

$ rvm install truffleruby
$ bundle exec rake                                        
spawn_setup: close_others not yet implemented
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler.rb:70:in `ui': cannot load such file -- bundler/ui (LoadError)
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/rubygems_integration.rb:61:in `validate'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/source/path.rb:157:in `validate_spec'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/source/path.rb:171:in `block in load_spec_files'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/source/path.rb:165:in `each'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/source/path.rb:165:in `load_spec_files'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/source/path.rb:100:in `local_specs'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/source/path.rb:108:in `specs'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:754:in `block in converge_locked_specs'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:740:in `each'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:740:in `converge_locked_specs'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:248:in `resolve'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:171:in `specs'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:238:in `specs_for'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:227:in `requested_specs'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/runtime.rb:108:in `send'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/runtime.rb:108:in `requested_specs'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/runtime.rb:20:in `setup'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/patches/bundler/bundler/runtime.rb:9:in `setup'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler.rb:107:in `setup'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/setup.rb:10:in `<top (required)>'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri/rubygems/core_ext/kernel_require.rb:133:in `gem_original_require'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri/rubygems/core_ext/kernel_require.rb:133:in `require'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/truffle/truffle/lazy-rubygems.rb:23:in `require'
	from /home/eregon/.rvm/gems/truffleruby-1.0.0-rc3@global/bin/truffleruby_executable_hooks:1:in `<main>'

And another try, in a new terminal:

$ rvm use truffleruby
$ bundle exec rake
bundler: failed to load command: rake (/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/bin/rake)
LoadError: cannot load such file -- bundler/dep_proxy
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:893:in `block (2 levels) in expand_dependencies'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:892:in `each'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:892:in `block in expand_dependencies'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:879:in `each'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:879:in `expand_dependencies'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:842:in `expanded_dependencies'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:258:in `resolve'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:171:in `specs'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:238:in `specs_for'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:227:in `requested_specs'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/runtime.rb:108:in `send'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/runtime.rb:108:in `requested_specs'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/runtime.rb:20:in `setup'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/patches/bundler/bundler/runtime.rb:9:in `setup'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler.rb:108:in `setup'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/setup.rb:10:in `<top (required)>'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri/rubygems/core_ext/kernel_require.rb:55:in `gem_original_require'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri/rubygems/core_ext/kernel_require.rb:55:in `require'

and indeed gem i bundler seems to fix it.

I'm not sure what goes wrong, but it seems bundler is removed from $LOAD_PATH at some point.
Printing $0, Process.pid and $LOAD_PATH in Bundler.ui I see:

/home/eregon/.rvm/gems/truffleruby-1.0.0-rc3@global/bin/bundle
4854
/home/eregon/.rvm/gems/truffleruby-1.0.0-rc3@global/gems/did_you_mean-1.1.0/lib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/patches/bundler
/home/eregon/.rvm/gems/truffleruby-1.0.0-rc3@global/gems/bundler-1.16.2/lib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/site_ruby/2.4.0
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/truffle
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/patches/stdlib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/json/lib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib

/home/eregon/.rvm/gems/truffleruby-1.0.0-rc3@global/bin/bundle
4854
/home/eregon/.rvm/gems/truffleruby-1.0.0-rc3@global/gems/did_you_mean-1.1.0/lib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/patches/bundler
/home/eregon/.rvm/gems/truffleruby-1.0.0-rc3@global/gems/bundler-1.16.2/lib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/site_ruby/2.4.0
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/truffle
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/patches/stdlib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/json/lib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib

# execve() from bundle to rake, or `$0` is reassigned?

/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/bin/rake
4854
/home/eregon/.rvm/gems/truffleruby-1.0.0-rc3@global/gems/did_you_mean-1.1.0/lib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/patches/bundler
/home/eregon/.rvm/gems/truffleruby-1.0.0-rc3@global/gems/bundler-1.16.2/lib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/site_ruby/2.4.0
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/truffle
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/patches/stdlib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/json/lib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib

# /home/eregon/.rvm/gems/truffleruby-1.0.0-rc3@global/gems/bundler-1.16.2/lib was removed from $LOAD_PATH here!

/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/bin/rake
4854
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/patches/bundler
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/site_ruby/2.4.0
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/truffle
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/patches/stdlib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/json/lib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib

/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/bin/rake
4854
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/patches/bundler
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/site_ruby/2.4.0
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/truffle
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/patches/stdlib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/json/lib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib


/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/bin/rake
4854
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/patches/bundler
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/site_ruby/2.4.0
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/truffle
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/patches/stdlib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/json/lib
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib

bundler: failed to load command: rake (/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/bin/rake)
LoadError: cannot load such file -- bundler/dep_proxy
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:893:in `block (2 levels) in expand_dependencies'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:892:in `each'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:892:in `block in expand_dependencies'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:879:in `each'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:879:in `expand_dependencies'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:842:in `expanded_dependencies'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:258:in `resolve'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:171:in `specs'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:238:in `specs_for'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/definition.rb:227:in `requested_specs'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/runtime.rb:108:in `send'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/runtime.rb:108:in `requested_specs'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/runtime.rb:20:in `setup'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/patches/bundler/bundler/runtime.rb:9:in `setup'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler.rb:108:in `setup'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/setup.rb:10:in `<top (required)>'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri/rubygems/core_ext/kernel_require.rb:55:in `gem_original_require'
  /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri/rubygems/core_ext/kernel_require.rb:55:in `require'

@eregon
Copy link
Member

eregon commented Jul 5, 2018

RVM magically does bundle exec around every Ruby command, see rubygems-bundler.
So typing just rake should be enough, but then I get:

$ rake                                        
/home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri/rubygems/core_ext/kernel_require.rb:55:in `gem_original_require': cannot load such file -- minitest/focus (LoadError)
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /home/eregon/code/kiba/test/helper.rb:3:in `<top (required)>'
	from /home/eregon/code/kiba/test/test_cli.rb:1:in `require_relative'
	from /home/eregon/code/kiba/test/test_cli.rb:1:in `<top (required)>'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri/rubygems/core_ext/kernel_require.rb:55:in `gem_original_require'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/mri/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /home/eregon/.rvm/rubies/truffleruby-1.0.0-rc3/lib/truffle/truffle/lazy-rubygems.rb:23:in `require'
	from /home/eregon/.rvm/gems/truffleruby-1.0.0-rc3@global/gems/rake-12.0.0/lib/rake/rake_test_loader.rb:15:in `block in <main>'
	from /home/eregon/.rvm/gems/truffleruby-1.0.0-rc3@global/gems/rake-12.0.0/lib/rake/rake_test_loader.rb:4:in `select'
	from /home/eregon/.rvm/gems/truffleruby-1.0.0-rc3@global/gems/rake-12.0.0/lib/rake/rake_test_loader.rb:4:in `<main>'

Maybe RVM's rubygems-bundler interferes somehow.
There was already a bug due to this: rvm/rvm#4408

@eregon
Copy link
Member

eregon commented Jul 5, 2018

Oddly, I can only observe this with RVM.
There's probably something strange going on with either the automatically installed Bundler or the use of global gemsets that doesn't play nicely with TruffleRuby at the moment.
I'll try to track it down, but if you'd like to make forward progress today you should maybe switch to rbenv or chruby, which both work fine for your use-case (bundle exec rake).

@thbar
Copy link
Contributor Author

thbar commented Jul 6, 2018

Prepending LLVM to PATH will no longer be necessary for macOS in the next release :)

That's great news! Congrats on making the whole experience more frictionless at each release!

if you'd like to make forward progress today you should maybe switch to rbenv or chruby

It's OK, I'll just gem install bundler when needed ; this is not a blocker, but I wanted to report it back anyway, since this will put down some newcomers.

@eregon
Copy link
Member

eregon commented Jul 6, 2018

I think I have found the root of the issue.
Bundler cleans $LOAD_PATH in https://github.com/bundler/bundler/blob/v1.16.2/lib/bundler/shared_helpers.rb#L339, except itself (because otherwise any autoload it declares could fail, which is what we see in this issue).
Unfortunately, that check fails on TruffleRuby, because bundler_ruby_lib returns
~/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib
and the path in $LOAD_PATH is
~/.rvm/gems/truffleruby-1.0.0-rc3@global/gems/bundler-1.16.2/lib

Those are actually the same, because
~/.rvm/gems/truffleruby-1.0.0-rc3@global is a symlink to
~/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0,
but the logic compares using File.expand_path(p).start_with?(bundler_lib) which doesn't consider symlinks.
So RVM's "global" gemset is just the default Gem.dir.
The fact RVM uses a symlink and even gives the value of that symlink in GEM_PATH (GEM_PATH=~/.rvm/gems/truffleruby-1.0.0-rc3:~/.rvm/gems/truffleruby-1.0.0-rc3@global) makes everything more brittle, which explains why only RVM fails.
(and why it's fine when re-installing bundler, because bundler gets installed in the "default" gemset, which has no symlink)
I'll probably create a RVM issue for this as using symlinks when not needed can be the source of many subtle bugs like this.

Still, it's good to find this bug :)
bundler_ruby_lib is defined like:

def bundler_ruby_lib
  File.expand_path("../..", __FILE__)
end

And so the bug is that __FILE__ is somehow the canonicalized path without symlinks for us (~/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib/bundler/shared_helpers.rb), and not the original name used to find the file in $LOAD_PATH (~/.rvm/gems/truffleruby-1.0.0-rc3@global/gems/bundler-1.16.2/lib + /bundler/shared_helpers.rb).
I'll take a look at fixing that.
(Currently the path is also canonicalized in $" in TruffleRuby, but not on JRuby)

BTW to find out this bug I installed JRuby with RVM and modified the source of both bundler installations in parallel and compared the output.
Comparing with MRI doesn't work because RVM installs latest RubyGems which contains Bundler and means completely different Bundler paths. This is not done by RVM for JRuby & TruffleRuby currently (good, that would add more variables).

@eregon
Copy link
Member

eregon commented Jul 6, 2018

As a note, it seems the same bug also happens when JRuby 9.2.0.0, because it appears to also canonicalize paths in $" and therefore __FILE__. JRuby 9.1.16.0 does not canonicalize and behaves like MRI.
I'll report the problem to them.

$ cd kiba
$ rvm install jruby-9.2.0.0
$ bundle exec rake 
bundler: failed to load command: rake (/home/eregon/.rvm/gems/jruby-9.2.0.0@global/bin/rake)
LoadError: no such file to load -- bundler/ruby_version
  /home/eregon/.rvm/rubies/jruby-9.2.0.0/lib/ruby/gems/shared/gems/bundler-1.16.2/lib/bundler/definition.rb:850:in `metadata_dependencies'
...

@deivid-rodriguez
Copy link

Unfortunately, that check fails on TruffleRuby, because bundler_ruby_lib returns
~/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0/gems/bundler-1.16.2/lib
and the path in $LOAD_PATH is
~/.rvm/gems/truffleruby-1.0.0-rc3@global/gems/bundler-1.16.2/lib

Those are actually the same, because
~/.rvm/gems/truffleruby-1.0.0-rc3@global is a symlink to
~/.rvm/rubies/truffleruby-1.0.0-rc3/lib/ruby/gems/2.4.0,
but the logic compares using File.expand_path(p).start_with?(bundler_lib) which doesn't consider symlinks.

@eregon This is getting fixed in bundler and milestoned to the next release (1.16.3). Although the PR is kind of stuck because of problems with getting the specs to pass, and it seems to be actually blocking the release: rubygems/bundler#6502.

@eregon
Copy link
Member

eregon commented Jul 7, 2018

@deivid-rodriguez Thank you for the pointer! I agree the check could be better in Bundler to deal with this better.

@eregon
Copy link
Member

eregon commented Jul 9, 2018

09cac1a fixes the value of __FILE__ and the entry in $" to behave like MRI.
However, since MRI 2.4.4 (the version we target currently), the part from the $LOAD_PATH is canonicalized (symlinks are resolved), and so this issue can only be fixed in Bundler with a better check and/or RVM to avoid symlinks in GEM_PATH.

@eregon
Copy link
Member

eregon commented Jul 9, 2018

I created an issue for RVM: rvm/rvm#4425
I also made a Pull Request to RubyGems so gem paths are expanded by rubygems and no gems should observe symlinks in their files' paths, making all paths comparison work better out of the box: rubygems/rubygems#2352
Of course, the benefit of that will be only when a new RubyGems version is released and used by Ruby implementations.

@eregon eregon self-assigned this Jul 10, 2018
@eregon eregon added this to the 1.0.0-rc4 milestone Jul 10, 2018
@eregon
Copy link
Member

eregon commented Jul 10, 2018

This was fixed upstream: rubygems/bundler#6502 (comment)
We just need to wait the next release of Bundler and the Bundler installed by RVM should work and not reproduce this issue.

@eregon
Copy link
Member

eregon commented Jul 15, 2018

I will probably apply my PR to resolve symlinks in RubyGems to our RubyGems version so things are more reliable and there are no symlinks involved in entries of $LOAD_PATH added by RubyGems.
But I plan to wait it's merged upstream for more feedback.

@eregon
Copy link
Member

eregon commented Jul 16, 2018

My PR to RubyGems rubygems/rubygems#2352 was merged, and I applied it to TruffleRuby's copy of RubyGems as well, so this bug should not reproduce in the next release (around end of the month), even with Bundler 1.16.2.

@eregon eregon closed this as completed Jul 16, 2018
@eregon
Copy link
Member

eregon commented Jul 22, 2018

Bundler 1.16.3 was released, which fixes this issue.
I tried the steps again and it works as expected now, with the existing TruffleRuby 1.0.0-rc3 release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants