44735


私はCentOS上にrbenvでrubyをインストールしました。  
そしてbundleというgemをインストールしました。  
しかしbundleがPATHに追加されていません。

実際に入力したコマンドで説明させていただきます。

[code]

    gem install bundle
    rbenv rehash
    bundle
    
[/code]

この時に以下のようなエラーが出ました。

[code]

    bash: bundle: command not found
    
[/code]

しかしbundleは`/root/.gem/ruby/2.5.0/gems/bundler-1.16.2/`にインストールされています。

またshimsは以下のようになっています。

[code]

    ls ~/.rbenv/shims/
    erb  gem  irb  rake  rdoc  ri  ruby
    
[/code]

なぜこのようなエラーが出るのでしょうか？ご回答よろしくお願いします。

# 補足説明等

コメントで指摘いただいた、不足の情報をここで補足させていただきます。

環境はDocker上のCentOSに対して、Ansibleを使い環境を構築しています。

whoamiの実行結果です。

[code]

    $whoami
    root
    
[/code]

gem environmentの実行結果です。

[code]

    $gem environment
    RubyGems Environment:
      - RUBYGEMS VERSION: 2.7.6
      - RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-linux]
      - INSTALLATION DIRECTORY: /root/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
      - USER INSTALLATION DIRECTORY: /root/.gem/ruby/2.5.0
      - RUBY EXECUTABLE: /root/.rbenv/versions/2.5.1/bin/ruby
      - EXECUTABLE DIRECTORY: /root/.rbenv/versions/2.5.1/bin
      - SPEC CACHE DIRECTORY: /root/.gem/specs
      - SYSTEM CONFIGURATION DIRECTORY: /root/.rbenv/versions/2.5.1/etc
      - RUBYGEMS PLATFORMS:
        - ruby
        - x86_64-linux
      - GEM PATHS:
         - /root/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
         - /root/.gem/ruby/2.5.0
      - GEM CONFIGURATION:
         - :update_sources => true
         - :verbose => true
         - :backtrace => false
         - :bulk_threshold => 1000
      - REMOTE SOURCES:
         - https://rubygems.org/
      - SHELL PATH:
         - /root/.rbenv/versions/2.5.1/bin
         - /root/.rbenv/libexec
         - /root/.rbenv/plugins/ruby-build/bin
         - /root/.rbenv/shims
         - /root/.rbenv/bin
         - /usr/local/sbin
         - /usr/local/bin
         - /usr/sbin
         - /usr/bin
         - /sbin
         - /bin
         - /root/bin
    
[/code]

bash_profileの内容です。

[code]

    $cat ~/.bash_profile
    
    # .bash_profile
    
    # Get the aliases and functions
    if [ -f ~/.bashrc ]; then
        . ~/.bashrc
    fi
    
    # User specific environment and startup programs
    
    PATH=$PATH:$HOME/bin
    
    export PATH
    export PATH="$HOME/.rbenv/bin:$PATH"
    eval "$(rbenv init -)"
    
[/code]


CC BY-SA 4.0
2018-06-12T03:37:25.740
44713
2018-06-13T13:17:19.570
2020-06-17T08:14:45.997
-1
15186
question
rbenv
インストールしたgemがPATHに追加されない


### 原因

`~/.gemrc` における `install: "--user"` という設定や Ansible
の[設定](https://docs.ansible.com/ansible/2.3/gem_module.html)など、何らかの理由により gem
のインストール先がデフォルトではなくユーザーが設定した場所になっています。このようにしてインストールされた gem は通常
`~/.gem/ruby/<バージョン>/bin` にインストールされますが、何も設定していないとここへの PATH
は通っていないのでコマンドが見つからないというエラーが出ます。

尚デフォルトのままインストールされていたとすると、gem は `~/.rbenv/versions/<バージョン>/bin` にインストールされ、`type
bundle` の結果が

[code]

    bundle is hashed (~/.rbenv/shims/bundle)
    
[/code]

のようになるはずです。

### 対策

いくつか方法があります。

  * ユーザー設定の場所にインストールする意味が無いのであれば、設定を変えて再インストールする。
  * ユーザー設定のインストール先を PATH に追加する。たとえば Ruby の公式 FAQ "[I INSTALLED GEMS WITH `--user-install` AND THEIR COMMANDS ARE NOT AVAILABLE"](https://guides.rubygems.org/faqs/#user-install) には例として以下のスクリプトを `~/.bashrc` に追記すると良い、と書かれています。
[code]     if which ruby >/dev/null && which gem >/dev/null; then

        PATH="$(ruby -r rubygems -e 'puts Gem.user_dir')/bin:$PATH"
    fi
    
[/code]


CC BY-SA 4.0
2018-06-13T02:30:00.843
44735
2018-06-13T13:17:19.570
2018-06-13T13:17:19.570
19110
19110
44713
answer