CentOS7にRails環境を整えるまで①−２（rbenv編）


前回の記事では直接rubyの最新版をインストールしてしまいました。
大きく問題がある訳ではないのですが、
今後のバージョン管理が煩雑になるのでrbenvを導入します。


##1.rbenvを取得

### rbenvとruby-buildの取得

```linux
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
```

gitリポジトリからのクローン
[https://github.com/sstephenson/rbenv]
rbenvはRuby environmentの略みたいですね。linuxのenvコマンドと同じ意味か。


##2.rbenvのPATHを設定

### bashシェルの設定
```linux
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ exec $SHELL
```
やってることは、CentOSの~/.bash_profile、PATHを通してるってことです。
１行目はechoコマンドで表示した文字列'export PATH="$HOME/.rbenv/bin:$PATH"'を「~/.bash_profile」にリダイレクト（直接書き込み）する。

２行目はechoコマンドで表示した文字列'eval "$(rbenv init -)"'を「~/.bash_profile」にリダイレクト（直接書き込み）する。

３行目はシェルの再起動。

この３行で行われる事は、
bashシェル用の環境設定ファイルにrbenv用のPATHを記述して、
その環境設定ファイルの内容を反映した状態にするという事です。
bashシェルって何かって？今あなたがコマンド打ち込んでるものです。


ちゃんと書けているかはviを使ってみてみましょう。

```vi
# .bash_profile 

~ 省略

export PATH 
export PATH="$HOME/.rbenv/bin:$PATH" 
eval "$(rbenv init -)" 
~                          
```
ありましたね。OK問題ありません。
下のコマンドを実行すると正常にインストールしてるか確認出来ます。

```linux
$ rbenv
（結果）rbenv 0.4.0-129-g7e0e85b
```

ちなみにrbenvコマンドの正体ですが、
rbenv関数を動かしているみたいですね。[$type rbenv]でみれます。

```linux
$ type rbenv

rbenv () 
{ 
    local command;
    command="$1";
    if [ "$#" -gt 0 ]; then
        shift;
    fi;
    case "$command" in 
        rehash | shell)
            eval "`rbenv "sh-$command" "$@"`"
        ;;
        *)
            command rbenv "$command" "$@"
        ;;
    esac
}
````


##3.rubyのインストール

### rubyのインストール

インストール可能なrubyのバージョンをみてみましょう。

```linux
$ rbenv install -l

Available versions:
  1.8.6-p383
  1.8.6-p420
  1.8.7-p249
  1.8.7-p302
  1.8.7-p334
  1.8.7-p352
  （つづく）

```
rbenv installコマンドが使えるのは「ruby-build」を導入しているからです。
また、パラメータの「ーl」は「--list」でも代用可です。

僕はlinuxコマンドを覚える為に、「--list」を使っています。

```linux
$ rbenv install 2.2.0

Downloading ruby-2.2.0.tar.gz...

```

正常に・・・終わらず。あれ？

BUILD FAILED (CentOS Linux 7 using ruby-build 20141225-3-g1c0509a)って出てしまいました。

こういうときは、焦らずログを確認する。

```linux 
$ cat /tmp/ruby-build.201412XXXXXXX.XXXXX.log
```

調べてみると、
./libffi-3.2.1/.libs/libffi.a: シンボルを読み込めませんでした: 不正な値です。
となっていました。

同じような事象を解決している方が居られたので参考にしました。

Ruby 2.2.0をrbenvとruby-buildでインストール
[http://qiita.com/MorimotoYasunori@github/items/fb81946fc088b18d6a3a]

つまり、libffiってパッケージがないってことなのか。なるほど。

```linux
$ sudo yum install libffi
パッケージ libffi-3.0.13-11.el7.x86_64 はインストール済みか最新バージョンです
何もしません
```

あれ。探してみよう。

```linux
$ sudo yum search libffi-dev
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * epel: ftp.tsukuba.wide.ad.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
=========================== N/S matched: libffi-dev ============================
ghc-libffi-devel.x86_64 : Haskell libffi library development files
libffi-devel.i686 : Development files for libffi
libffi-devel.x86_64 : Development files for libffi
```

この中だと、libffi-devel.x86_64なのかな…

``` linux
$ sudo yum install libffi-devel.x86_64
（インストール後）
$ rbenv install 2.2.0
...
Installed ruby-2.2.0 to /home/XXX/.rbenv/versions/2.2.0
```

あ、完了しました。

ただ、よくよく考えたらリンクが正しく設定されてないだけだったのかもしれない。
インストール済ってなってましたし。


``` linux
$ rbenv versions
* system (set by /home/XXX/.rbenv/version)
  2.2.0
```

### インストールしたrubyバージョンを使用するように設定

``` linux
$ rbenv global 2.2.0
$ ruby -v
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux]
```

とりあえず、rubyの設定は完了しました。

でも、なんだか腑に落ちないけど、これでいいのかな。