Search code examples
ruby-on-railsrubybundlerrbenv

Problem installing bundler, Says it installs, but then doesn't actually install


I am setting up a new system. I'm using rbenv instead of rvm because rvm changes the definition of 'cd' and that's just evil.

I've got the required version of ruby and rails (I think) installed, but bundler is causing problems:

turlingdrome$ gem install bundler
ERROR:  While executing gem ... (Errno::EACCES)
    Permission denied @ rb_sysopen - /Users/brianp/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/bundler-2.0.1/CHANGELOG.md

turlingdrome$ sudo gem install bundler
/usr/local/Cellar/rbenv/1.1.2/rbenv.d/exec/gem-rehash/rubygems_plugin.rb:6: warning: Insecure world writable dir /Users/brianp/work in PATH, mode 040777
Successfully installed bundler-2.0.1
Parsing documentation for bundler-2.0.1
Done installing documentation for bundler after 3 seconds
1 gem installed

turlingdrome$ sudo gem uninstall bundler
Gem 'bundler' is not installed

turlingdrome$ bundler install
Traceback (most recent call last):
    2: from /Users/brianp/.rbenv/versions/2.5.3/bin/bundler:23:in `<main>'
    1: from /Users/brianp/.rbenv/versions/2.5.3/lib/ruby/2.5.0/rubygems.rb:308:in `activate_bin_path'
/Users/brianp/.rbenv/versions/2.5.3/lib/ruby/2.5.0/rubygems.rb:289:in `find_spec_for_exe': can't find gem bundler (>= 0.a) with executable bundler (Gem::GemNotFoundException)

So, I tried using sudo once, and now I think that the permissions are super user... so I'm using sudo. no big deal.

Installing appears to work.

When I try to uninstall, it says it's not installed.

When I try to run it, it finds an executable, but then says it can't find an executable.

I'm using ruby 2.5.3 and rails (I think) 5.2.3.

Rails crashes with:

turlingdrome$ rails -v
/Users/brianp/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/railties-5.2.3/lib/rails/app_loader.rb:53: warning: Insecure world writable dir /Users/brianp/work in PATH, mode 040777
Traceback (most recent call last):
    4: from bin/rails:3:in `<main>'
    3: from bin/rails:3:in `require_relative'
    2: from /Users/brianp/work/online-reporting/config/boot.rb:6:in `<top (required)>'
    1: from /Users/brianp/.rbenv/versions/2.5.3/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/Users/brianp/.rbenv/versions/2.5.3/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require': cannot load such file -- bundler/setup (LoadError)

which I assume is the same issue.

In case this matters, I'm on a mac.


Solution

  • rbenv works by inserting a directory of shims at the front of your PATH:

    ~/.rbenv/shims:/usr/local/bin:/usr/bin:/bin
    

    Through a process called rehashing, rbenv maintains shims in that directory to match every Ruby command across every installed version of Ruby—irb, gem, rake, rails, ruby, and so on.

    Shims are lightweight executables that simply pass your command along to rbenv. So with rbenv installed, when you run, say, rake, your operating system will do the following:

    • Search your PATH for an executable file named rake
    • Find the rbenv shim named rake at the beginning of your PATH
    • Run the shim named rake, which in turn passes the command along to rbenv

    You messed up your rbenv installation.

    1) Remove ruby installation outside rbenv

    2) rvm implode

    3) Clean up your $PATH env variable from ~/.bash_profile or ~/.bashrc

    Remove any $PATH reference pointing to ruby, irb, gem or any folder including those bin executable. Consider commenting any $PATH statement from your bash_profile

    # export PATH="$HOME/etc/bin:$PATH"
    # leave the statement below 
    # export PATH="$HOME/.rbenv/bin:$PATH
    

    The $PATH variable includes a list of folders:

    echo $PATH
    home/fabrizio/.rbenv/shims:/opt/android-studio/bin:~/.scripts/bin
    

    if you run gem in your terminal

    any .bin executable file included in home/fabrizio/.rbenv/shims or /opt/android-studio/bin is executable from any location in the terminal. When you run gem, the ruby gem command is executed instead of being intercepted from rbenv, because you installed ruby outside of rbenv.

    UPDATE BASED ON YOUR FEEDBACK

    You must have followed this step when installing ruby 2.5.0 without rbenv so remove from your ~/.bash_profile or ~/.bashrc the following line

    PATH="$PATH:$(ruby -e 'puts Gem.user_dir')/bin"
    

    or any other line which is adding /Users/brianp/.gem/ruby/2.5.0/bin to your $PATH, then uninstall ruby with apt.

    Read the following information, additionally always check the location where gems are being installed with gem env:

    $ gem env home
    # => ~/.rbenv/versions/<ruby-version>/lib/ruby/gems/...
    

    if the location from anywhere in the terminal is not under ~/.rbenv/ then you are installing the gems in the wrong locations.

    LAST RESORT

    Delete the gem folder with rm -rf ~/.gem, a similar approach to this post if you can not remove /Users/brianp/.gem/ruby/2.5.0/bin from your $PATH

    SOLUTION FOR YOUR LAST ERROR

    This error is caused from installing bundler 2.0

      can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)
    

    you need to remove bundler 2.0 and install 1.9.0