Reputation: 12197
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.
Upvotes: 1
Views: 2216
Reputation: 5942
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
Upvotes: 2
Reputation: 5541
Try to delete Gemfile.lock
and try to install and use bundler again - I have just found that on Github:
Bundler 2 introduced a new feature that will automatically switch between Bundler v1 and v2 based on the lockfile [...] If you do, it can be fixed by installing the version of Bundler that is declared in the lockfile. This bug was fixed in RubyGems 3.0.0 but backports are now being prepared for previous major versions of RubyGems. We’ll let you know when they become available.
Upvotes: 0
Reputation: 5541
Seems to be a permission issue on a folder.
permission denied @ rb_sysopen -
/Users/brianp/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/bundler-2.0.1/CHANGELOG.md
I'd try to change permissions on the mentioned file / folder using chmod 755 /Users/brianp/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/
There are several posts which handle a similar topic, e.g. this.
Upvotes: 0
Reputation: 15308
warning: Insecure world writable dir /Users/brianp/work in PATH, mode 040777
Looks like problem with access rights. Try this:
sudo chmod 755 /Users/brianp/work
Upvotes: 0
Reputation: 4098
Usage of rbenv
is a good choice to manage ruby
installation on Mac, but it seems that you finished up in a complete mess of broken rbenv/gem/rails/bundler
installation and permissions. It it is not worth of fixing it, so I suggest to just get rid of rbenv
, remove ~/.rbenv
directory and install rbenv
with brew
again using this guide.
Other ways to check:
Run rbenv-doctor
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash
Remove ~/.rbenv
directory, run rbenv init
again and install required version of Ruby
Check that which ruby
and which gem
points to appropriate location inside ~/.rbenv
directory
Things to note:
rbenv
and brew
, as well as gem
do not require sudo
, so you should never use it with themeval "$(rbenv init -)"
in your shell init script, e.g. echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
Upvotes: 0