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
$ 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にインストールされる。