CentOS7にRubyをインストールしてみる

yumの場合

rubyのインストール

下記を実行

$ sudo yum -y install ruby

インストールされるバージョンは、「2.0」と古い。(現時点の最新は「2.7」)

$ ruby --version
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]

rubyとgemのコマンドは、「/usr/bin」に作られる。

$ which ruby
/usr/bin/ruby

$ which gem
/usr/bin/gem

gemのインストール

試しに、gemをインストールしてみると、Rubyのバージョンが古いせいかエラーになった。

$ gem install minitest
Fetching: minitest-5.14.2.gem (100%)
ERROR:  Error installing minitest:
        minitest requires Ruby version < 3.1, >= 2.2.

ちなみに、centos8だと「2.5」がインストールされる。

$ sudo yum -y install ruby

$ ruby --version
ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-linux]

なので、同じようにgemをインストールしてみると、うまくいく。

$ gem install minitest
Fetching: minitest-5.14.2.gem (100%)
Successfully installed minitest-5.14.2
Parsing documentation for minitest-5.14.2
Installing ri documentation for minitest-5.14.2
Done installing documentation for minitest after 0 seconds
1 gem installed

gemは、HOMEの「.gem/ruby/gems/」にインストールされる。

$ ls /home/vagrant/.gem/ruby/gems/
minitest-5.14.2

ちなみに、sudoでインストールした場合は「/usr/local/share/gems/gems/」にインストールされる。

$ sudo gem install minitest
Fetching: minitest-5.14.2.gem (100%)
Successfully installed minitest-5.14.2
1 gem installed

$ ls /usr/local/share/gems/gems/
minitest-5.14.2

ちなみに、gemに関する情報は下記の通り。

$ gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 2.7.6.2
  - RUBY VERSION: 2.5.5 (2019-03-15 patchlevel 157) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/share/gems
  - USER INSTALLATION DIRECTORY: /home/vagrant/.gem/ruby
  - RUBY EXECUTABLE: /usr/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/bin
  - SPEC CACHE DIRECTORY: /home/vagrant/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/share/gems
     - /home/vagrant/.gem/ruby
     - /usr/local/share/gems
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
     - "gem" => "--user-install --bindir /home/vagrant/bin"
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /home/vagrant/.local/bin
     - /home/vagrant/bin
     - /usr/local/bin
     - /usr/bin
     - /usr/local/sbin
     - /usr/sbin

gemをbundlerでインストール

bundlerをインストールする。

$ gem install bundler

$ bundler --version
Bundler version 2.1.4

$ bundle --version
Bundler version 2.1.4

コマンドは「/home/vagrant/bin/」に作られた。

$ which bundler
~/bin/bundler

$ which bundle
~/bin/bundle

Gemfileを作成して、

$ vi Gemfile
source "https://rubygems.org"
gem "minitest"

インストールすると、

$ bundle install

「/usr/share/gems/gems/」にインストールされた。

$ ls /usr/share/gems/gems/
bigdecimal-1.3.4    io-console-0.4.6  minitest-5.14.2  psych-3.0.2
did_you_mean-1.2.0  json-2.1.0        openssl-2.1.2    rdoc-6.0.1

インストール先を指定してインストールした場合

$ mkdir hoge
$ bundle install --path hoge

指定したディレクトリにインストールされる。

$ ls /home/vagrant/hoge/ruby/2.5.0/gems/
minitest-5.14.2

インストール先に指定したディレクトリは、「.bundle/config」に書かれており、 次回以降は、pathを指定しなくても、自動的にこのパスが指定されるみたい。

$ cat /home/vagrant/.bundle/config
---
BUNDLE_PATH: "hoge"

Software Collection(SCL)を使った場合

centos-release-sclのリポジトリを登録すると、

$ sudo yum -y install centos-release-scl

yumで最新のrubyをインストールできる。

$ sudo yum -y install rh-ruby27

ただ、このままでは使えず、

$ ruby --version
-bash: ruby: command not found

下記のコマンドで、rh-ruby27を有効にして新たにbashを実行する必要あり。

$ scl enable rh-ruby27 bash

これで、「2.7」が使えるようになる。

$ ruby --version
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]

rbenvを使った場合

rbenvのインストール

下記の手順でrbenvをインストールする。

$ sudo yum install -y git gcc gcc-c++ openssl-devel readline-devel
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

[参考] rbenvを用いたruby環境構築手順(CentOS7.1) https://qiita.com/ksugawara61/items/e3bb87d5e0dd49d20c8f

インストールできているのが確認できる。

$ rbenv --version
rbenv 1.1.2-36-g60c9339

$ rbenv install --version
ruby-build 20201005-4-g4761049

rubyのインストール

インストール可能なバージョンは下記の通り。

$ rbenv install -l
2.5.8
2.6.6
2.7.2
jruby-9.2.13.0
maglev-1.0.0
mruby-2.1.2
rbx-5.0
truffleruby-20.2.0
truffleruby+graalvm-20.2.0

Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all' to show all local versions.

最新のrubyをインストールしてみる。

$ rbenv install 2.7.2

インストールされているのが確認できる。

$ rbenv versions
  2.7.2

$ ls /home/vagrant/.rbenv/versions/2.7.2/
bin  include  lib  share

$ which ruby
~/.rbenv/shims/ruby

ただ、このままでは使えない。

$ ruby --version
rbenv: ruby: command not found

The `ruby' command exists in these Ruby versions:
  2.7.2

$ rbenv version
system

globalで、システム全体で使うバージョンに指定すると、

$ rbenv global 2.7.2

有効になる。

$ ruby --version
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]

$ rbenv version
2.7.2 (set by /home/vagrant/.rbenv/version)

$ cat /home/vagrant/.rbenv/version
2.7.2

バージョンの切り替え

他のバージョンをインストールして、

$ rbenv install 2.6.6

$ rbenv versions
  2.6.6
* 2.7.2 (set by /home/vagrant/.rbenv/version)

切り替えることも可能。

$ rbenv global 2.6.6

$ rbenv versions
* 2.6.6 (set by /home/vagrant/.rbenv/version)
  2.7.2

$ ruby --version
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux]

globalではなく、localでバージョンを指定すると、

$ rbenv global 2.7.2

$ mkdir hoge
$ cd hoge
$ rbenv local 2.6.6

特定のディレクトリ以下のみ、バージョンを変えることができる。

$ pwd
/home/vagrant/hoge
$ ruby --version
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux]

$ ..
$ pwd
/home/vagrant
$ ruby --version
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]

試しに、rubyのバージョンを出力するスクリプトを作成して、実行してみる。

$ vi hoge.rb
puts __dir__
puts RUBY_VERSION

$ vi hoge/hoge.rb
puts __dir__
puts RUBY_VERSION

local外からlocal内のスクリプトを実行すると、local内のrubyのバージョンが有効になるが、

$ pwd
/home/vagrant

$ ruby hoge.rb
/home/vagrant
2.7.2

$ ruby hoge/hoge.rb
/home/vagrant/hoge
2.6.6

local内からlocal外のスクリプトを実行した場合は、local内のrubyのバージョンが有効になった。

$ cd hoge

$ ruby hoge.rb
/home/vagrant/hoge
2.6.6

$ ruby ../hoge.rb
/home/vagrant
2.6.6

gemのインストール

バージョンが2.7.2の所で、

$ pwd
/home/vagrant
$ ruby --version
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]
$ gem --version
3.1.4

gemをインストールしてみると、

$ gem install minitest

2.7.2のディレクトリの下にgemがインストールされる。

$ ls /home/vagrant/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/
・・・  minitest-5.14.2  ・・・

バージョンが2.6.6の所で、

$ cd hoge
$ ruby --version
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux]
$ gem --version
3.0.3

gemをインストールした場合は、

$ gem install minitest

2.6.6のディレクトリの下にgemがインストールされる。

$ ls /home/vagrant/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/
・・・  minitest-5.14.2  ・・・

bundlerでgemをインストール

rbenvでrubyをインストールした時点で、bundlerも既にインストールされてるっぽい。
(別途インストールする必要なし?)

$ bundler --version
Bundler version 2.1.4

Gemfileを作成して、bundle installを実行すると、

$ vi Gemfile
source "https://rubygems.org"
gem "pp"

$ bundle install

2.7.2のディレクトリのgemsにインストールされる。

$ ls /home/vagrant/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/
・・・  pp-0.1.0  ・・・

2.6.6の所でbundle installを実行した場合は、2.6.6のディレクトリのgemsにインストールされる。