Rbenv not rehashing correctly and making shims

房东的猫 提交于 2019-12-11 23:08:59

问题


The bottom line is, rbenv isn't making shims. I've exhausted ideas of what could be the problem. After a few days of banging my head against a wall to fix but no avail, I think it's time to ask for help.

I'm attempting to make the switch from RVM to rbenv, so that could obviously be a factor here. Any ideas/help would be great.

Here's what happens:

[09:38] ~ $ gem install pry
Fetching: pry-0.10.2.gem (100%)
Successfully installed pry-0.10.2
1 gem installed

[09:39] ~ $ rbenv rehash

[09:40] ~ $ pry
bash: pry: command not found

[09:40] ~ $ rbenv which pry
rbenv: pry: command not found

[09:40] ~ $ which pry
which: no pry in (/home/caveman/.rbenv/plugins/ruby-build/bin:/home/caveman/.rbenv/shims:/home/caveman/.rbenv/bin:/home/caveman/.rbenv/shims:/home/caveman/.rbenv/bin:/home/caveman/.rbenv/plugins/ruby-build/bin:/home/caveman/.rbenv/shims:/home/caveman/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)

[09:41] ~ $ ~/.gem/ruby/2.2.0/bin/pry 
[1] pry(main)> puts "I'm working now"
I'm working now

[09:43] ~ $ gem list | grep pry
pry (0.10.2)

Here's my gem environment:

[09:44] ~ $ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 2.4.8
  - RUBY VERSION: 2.2.0 (2014-12-25 patchlevel 0) [x86_64-linux]
  - INSTALLATION DIRECTORY: /home/caveman/.gem/ruby/2.2.0
  - RUBY EXECUTABLE: /home/caveman/.rbenv/versions/2.2.0/bin/ruby
  - EXECUTABLE DIRECTORY: /home/caveman/.gem/ruby/2.2.0/bin
  - SPEC CACHE DIRECTORY: /home/caveman/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY:  /home/caveman/.rbenv/versions/2.2.0/etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /home/caveman/.gem/ruby/2.2.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
     - "gem" => "--no-document"
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /home/caveman/.rbenv/versions/2.2.0/bin
     - /usr/lib/rbenv/libexec
     - /home/caveman/.rbenv/plugins/ruby-build/bin
     - /home/caveman/.rbenv/shims
     - /home/caveman/.rbenv/bin
     - /home/caveman/.rbenv/shims
     - /home/caveman/.rbenv/bin
     - /home/caveman/.rbenv/plugins/ruby-build/bin
     - /home/caveman/.rbenv/shims
     - /home/caveman/.rbenv/bin
     - /usr/local/sbin
     - /usr/local/bin
     - /usr/bin
     - /usr/lib/jvm/default/bin
     - /usr/bin/site_perl
     - /usr/bin/vendor_perl
     - /usr/bin/core_perl

Here is my .bashrc file:

[09:46] ~ $ cat .bashrc
# If not running interactively, don't do anything
[[ $- != *i* ]] && return

# If I don't set this, gem reverts back to nonexistent RVM directory.
export GEM_HOME=$(ruby -e 'print Gem.user_dir')
export GEM_PATH=$(ruby -e 'print Gem.user_dir')

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"

And here is .bash_profile:

[09:52] ~ $ cat .bash_profile 

[[ -f ~/.bashrc ]] && . ~/.bashrc

source ~/.profile

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

回答1:


I suspect your .bashrc is the problem. It shouldn't contain:

# If I don't set this, gem reverts back to nonexistent RVM directory.
export GEM_HOME=$(ruby -e 'print Gem.user_dir')
export GEM_PATH=$(ruby -e 'print Gem.user_dir')

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"

Of my ~/.bashrc, ~/.profile and ~/.bash_profile files, only the last has configuration for rbenv:

# echo Using rbenv...
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

That was created when I installed rbenv, which matches the settings for my other systems where I use rbenv, including some that previously had RVM installed.

Your double PATH assignments look like the culprit. Compare the PATH for my system to yours, which is listed by gem env:

 - /Users/ttm/.rbenv/versions/2.2.3/bin
 - /Users/ttm/.rbenv/libexec
 - /Users/ttm/.rbenv/plugins/ruby-build/bin
 - /Users/ttm/.rbenv/plugins/rbenv-whatis/bin
 - /Users/ttm/.rbenv/plugins/rbenv-vars/bin
 - /Users/ttm/.rbenv/plugins/rbenv-use/bin
 - /Users/ttm/.rbenv/plugins/rbenv-update/bin
 - /Users/ttm/.rbenv/plugins/rbenv-update-rubies/bin
 - /Users/ttm/.rbenv/plugins/rbenv-gemset/bin
 - /Users/ttm/.rbenv/plugins/rbenv-env/bin
 - /Users/ttm/.rbenv/plugins/rbenv-each/bin
 - /Users/ttm/.rbenv/shims
 - /Users/ttm/.rbenv/bin

Similarly, my which pry returns:

/Users/ttm/.rbenv/shims/pry

Using rbenv's env plugin shows:

RBENV_VERSION=2.2.3
RBENV_GEMSET_ALREADY=yes
RBENV_ROOT=/Users/ttm/.rbenv
RBENV_HOOK_PATH=:/Users/ttm/.rbenv/rbenv.d:/usr/local/etc/rbenv.d:/etc/rbenv.d:/usr/lib/rbenv/hooks:/Users/ttm/.rbenv/plugins/rbenv-default-gems/etc/rbenv.d:/Users/ttm/.rbenv/plugins/rbenv-gemset/etc/rbenv.d:/Users/ttm/.rbenv/plugins/rbenv-readline/etc/rbenv.d:/Users/ttm/.rbenv/plugins/rbenv-vars/etc/rbenv.d
PATH=/Users/ttm/.rbenv/versions/2.2.3/bin:/Users/ttm/.rbenv/libexec:/Users/ttm/.rbenv/plugins/ruby-build/bin:/Users/ttm/.rbenv/plugins/rbenv-whatis/bin:/Users/ttm/.rbenv/plugins/rbenv-vars/bin:/Users/ttm/.rbenv/plugins/rbenv-use/bin:/Users/ttm/.rbenv/plugins/rbenv-update/bin:/Users/ttm/.rbenv/plugins/rbenv-update-rubies/bin:/Users/ttm/.rbenv/plugins/rbenv-gemset/bin:/Users/ttm/.rbenv/plugins/rbenv-env/bin:/Users/ttm/.rbenv/plugins/rbenv-each/bin:/Users/ttm/.rbenv/shims:/Users/ttm/.rbenv/bin:/Users/ttm/.pyenv/shims:/Users/ttm/.pyenv/bin:/Users/ttm/perl5/perlbrew/bin:/Users/ttm/perl5/perlbrew/perls/perl-5.18.1/bin:/Users/ttm/bin:/usr/local/mysql-5.6.16-osx10.7-x86_64/bin:/Users/ttm/libsmi/bin:/usr/local/git/bin:/usr/local/bin:/Library/PostgreSQL/9.2/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/git/bin
RBENV_SHELL=bash
RBENV_DIR=/Users/ttm
RUBYLIB=/Users/ttm/.rbenv/rbenv.d/exec/gem-rehash:

I'd do these steps:

  1. Modify ~/.bashrc, and the others, removing any lines referring to rbenv and/or RVM. RVM uses all three init files, plus .zshrc, whereas rbenv only seems to touch ~/.bash_profile.
  2. Close the terminal session. Reopen it.
  3. Confirm the PATH is free from all references to RVM and rbenv.
  4. Reinstall rbenv following the Installation instructions. It won't override the current installation, but instead will reinstall its changes to ~/.bash_profile.
  5. Close the terminal session again and reopen it.

rbenv should now be initialized correctly.



来源:https://stackoverflow.com/questions/32808741/rbenv-not-rehashing-correctly-and-making-shims

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!