はじめに
前回はRuby、rubygems、Gem、bundlerについてまとめた。いよいよrbenv(+ruby-build)を使う場合についてまとめる。
概要
rbenvはサーバーの中で複数のrubyバージョン環境を構築できるようにしてくれる。ruby-buildはrbenvのプラグインであり、rbenv配下で実際にrubyを導入してくれる。
ディレクトリ構成とインストール
ディレクトリ構造
これまでとはrubyの場所が違うので、改めて全体について1枚絵にする。
インストール
-
rbenvとruby-buildの配置(紺色)
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
コマンドで、rbenvのファイル一式を配置する。git clone
なのであくまで配置するだけだ。ruby-buildも同様にgit clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
コマンドで配置する。 -
.bash_profileの設定(水色)
rbenv
コマンドはrvenb/bin/にあるがここにはパスが通っていない。そこでecho 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile.
コマンドを実行し、ログイン時に毎回パスが通るようにする。併せて、echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
コマンドでrbenv init -
の実行結果も.bash_profileに書き込む。'rbenv init -'については、内容がちょっと難しいのでここでは割愛する。(versionsフォルダも作成される。)
.bash_profileを設定し終わったら、exec $SHELL --login
で再ログインし、.bash_profileを実行する。'rbenv --version'でパスが正しく通ったか確認する。 -
rubyのインストール(緑色)
rbenv install --list
でインストールできるRubyバージョンの一覧を表示し、rbenv install -v 2.6.0
とバージョンを指定しインストールする。インストール後、rbenv versions
を実行し、インストールされたrubyを確認する。今回は2.6.0と2.4.0をインストールした。
インストール後はrbenv rehash
コマンドを実行する。これも難しいので割愛するが、Rubyのバージョンをインストールしたとき、コマンドのあるgemを導入したときは必ず実施する必要がある。
https://github.com/rbenv/rbenv#rbenv-rehash -
ディレクトリで使用するrubyの設定(黄色)
ディレクトリに対して使用するrubyのバージョンを設定する。最初にrbenv global 2.6.0
コマンドでglobalなrubyバージョンを設定する。これを設定すると、ディレクトリにrubyバージョンが設定されていない場合に利用されるrubyのバージョンを指定できる。具体的には、.rbenv/配下にversionファイルができ、そこにバージョンが書き込まれる。一方で、特定のディレクトリにバージョンを設定する場合は、設定するディレクトリに移動し、
rbenv local 2.4.0
コマンドで設定する。設定するとディレクトリに.ruby-versionが作成され、そこにバージョンが書き込まれている。 -
確認
最後に、きちんと設定されているか確認する。確認は各々のRubyアプリケーションディレクトリで実行する。まずrbenv versions
でディレクトリで利用されるrubyのバージョンを確認する。そしてruby -v
、gem -v
、bundle -v
を実行し、それぞれが利用可能なことを確認する。(bundlerについては、Rubyのバージョンによって入っているものと入っていないものがある。)
-
RubyAPP1/の場合
[ec2-user@ip-10-0-1-14 ~]$ cd RubyAPP1
[ec2-user@ip-10-0-1-14 RubyAPP1]$ rbenv versions
2.4.0
- 2.6.0 (set by /home/ec2-user/.rbenv/version)
[ec2-user@ip-10-0-1-14 RubyAPP1]$ ruby -v
ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-linux][ec2-user@ip-10-0-1-14 RubyAPP1]$ gem -v
3.0.1
[ec2-user@ip-10-0-1-14 RubyAPP1]$ bundle -v
Bundler version 1.17.2
* RubyAPP2/の場合
```bash
[ec2-user@ip-10-0-1-14 RubyAPP2]$ rbenv versions
* 2.4.0 (set by /home/ec2-user/RubyAPP2/.ruby-version)
2.6.0
[ec2-user@ip-10-0-1-14 RubyAPP2]$ ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
[ec2-user@ip-10-0-1-14 RubyAPP2]$ gem -v
2.6.8
[ec2-user@ip-10-0-1-14 RubyAPP2]$ bundle -v
rbenv: bundle: command not found
The `bundle' command exists in these Ruby versions:
2.6.0
まとめ
rbenvによって、アプリケーション単位でruby,rubygems,bundler,gemが分かりやすく管理できる。Rubyはバージョン間の互換性が低いプログラム言語であるゆえに、こういった形になったらしい。rbenvのinitとrehashを読み解ければほぼほぼクリアになるが、それはまた別の機会にする。