rbenvでインストールしたRubyのバージョンを上げる

# 前提条件
- Ruby周りは、下記の場所にインストールされているものとする。
 - rbenvの場所: `/home/someuser/.rbenv/`
 - ruby-buildの場所: `/home/someuser/.rbenv/plugins/ruby-build`

（ユーザー「someuser」がRubyを使う体で）

# 制限事項
* 本手順は、CentOS 7 / fedora 28 にて使用したものである。

# 手順

v2.4.1 → v2.4.2 に上げるパターンを例にとる

## 現在のバージョンを調べる

使用するユーザーになる

```bash
sudo su - someuser
```

現在のrubyのバージョン

```bash
ruby --version
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
```

rbenvに登録されているRubyバージョン(*印は、現在有効になっているバージョン)

``` bash
rbenv versions
* 2.4.1 (set by /home/someuser/.rbenv/version)
```

rbenvでインストールできるRubyのバージョン一覧

```bash
rbenv install -l
Available versions:
・
・
・
  2.4.0-preview3
  2.4.0-rc1
  2.4.0
  2.4.1
  2.5.0-dev
  jruby-1.5.6
  jruby-1.6.3
  jruby-1.6.4
・
・
・
```

v2.4.2が無い！どうしよう！！

## ruby-buildのアップデート

ruby-buildそのものを更新してみる

```bash
 cd ~/.rbenv/plugins/ruby-build && git pull && cd -
```

この状況下ではどうか？

```bash
rbenv install -l
Available versions:
・
・
・
  2.4.0-preview3
  2.4.0-rc1
  2.4.0
  2.4.1
  2.4.2
  2.5.0-dev
  jruby-1.5.6
  jruby-1.6.3
  jruby-1.6.4
・
・
・
```

v2.4.2 があらわれた！！


## rbenvを使って、rubyを更新しデフォルトで使用するようにする

```bash
rbenv install 2.4.2 && rbenv global $_ && rbenv rehash
Downloading ruby-2.4.2.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.bz2
Installing ruby-2.4.2...
Installed ruby-2.4.2 to /home/someuser/.rbenv/versions/2.4.2
```


## 結果を確認する

現在のrubyのバージョン

```bash
ruby --version
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]
```

rbenvに登録されているRubyバージョン

```bash
rbenv versions
  2.4.1
* 2.4.2 (set by /home/someuser/.rbenv/version)
```

切り替わった！！ やったね！！

## (Optional) jemallocを使う場合

```bash
$ RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install x.x.x && rbenv global $_ && rbenv rehash
```

あらかじめローカルに `jemalloc-devel` が必要なので、インストールしておく。


### jemallocが有効になっているか確認

**v2.5 以前**

```ruby
irb(main):002:0> RbConfig::CONFIG['LIBS']
=> "-lpthread -ljemalloc -lgmp -ldl -lcrypt -lm "
```

**v2.6以降**

```ruby
irb(main):002:0> RbConfig::CONFIG['MAINLIBS']
> "-lz -lpthread -lrt -lrt -ljemalloc -lgmp -ldl -lcrypt -lm"
```

`-ljemalloc` が含まれていれば有効になっているはず


## (Optional) `/tmp` の空き容量が足りなくてインストールに失敗する時

環境変数 `TMPDIR` に適当なディレクトリを設定してやることで、そこをテンポラリディレクトリとして使用するようになる

```bash
$ TMPDIR="/home/mastodon/rbenv_tmp" rbenv install x.x.x
```


## (Optional) bundlerのインストール

そのままだとbundleコマンドが使えないので、gemでbundlerをインストールする

```bash
gem install bundler
```

## (Optional) 古いバージョンのアンインストール

バージョンあたり150～200MB程度の容量を消費する。
米印のついているバージョンは現在使用中のものなので消さないように！

```bash
$ rbenv versions
  2.5.1
  2.5.3
* 2.6.0 (set by /home/someuser/.rbenv/version)

$ du -d 1 -h .rbenv/versions
170M    .rbenv/versions/2.5.3
205M    .rbenv/versions/2.6.0
170M    .rbenv/versions/2.5.1
545M    .rbenv/versions

$ rbenv uninstall 2.5.3
rbenv: remove /home/someuser/.rbenv/versions/2.5.3? [yN] y

$ rbenv versions
  2.5.1
* 2.6.0 (set by /home/someuser/.rbenv/version)
```

# まとめ

```bash
# Ruby-Build を最新にしてから
$ cd ~/.rbenv/plugins/ruby-build && git pull && cd -


# 任意のバージョンを入れる！
$ rbenv install x.x.x && rbenv global $_ && rbenv rehash

# ※jemallocを使うときはこれ
$ RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install x.x.x && rbenv global $_ && rbenv rehash

# ※さらに一時フォルダを指定したいときはこれ
$ TMPDIR="/home/someuser/rbenv_tmp" RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install x.x.x && rbenv global $_ && rbenv rehash

# 終わったらbundlerを入れる！
$ gem install bundler
```