Vagrant 上の CentOS で Rails の環境構築

久々にVagrant上のRailsを弄っていたら何やら動作が変だったので、Vagrant自体からの再構築をしてみました。後に見返せるようにメモします。初めてのVagrantとRailsを導入する方でも使える内容だと思います。

# 仮想マシンの構築
VirtualBoxをダウンロードし、インストール
https://www.virtualbox.org/wiki/Downloads

Vagrantをダウンロードし、インストール
https://www.vagrantup.com/downloads.html

先に仮想マシンのプロジェクトを置くディレクトリを作成しましょう。

```
$ cd ~
$ mkdir vagrant
$ cd vagrant
$ mkdir centos65
$ cd centos65
```

Vagrantでは、boxと呼ばれる仮想マシンを素早くクローンするためのベースイメージが提供されています。使用できるboxの一覧は以下のサイトで見ることができます。
http://www.vagrantbox.es/

boxをインストールするには

```
$ vagrant box add 名前 boxのurl
```

というコマンドを使用します。
今回はCentOS 6.5を使用します。

```
$ vagrant box add centos6.5 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
```

これでboxが追加されました。追加しているboxの一覧を見ることもできます。

```
$ vagrant box list
centos6.5 (virtualbox, 0)
```

初期化をしましょう。

```
$ vagrant init centos6.5
```

ディレクトリ上にVagrantfileが作成されます。Vagrantfileは大まかにいうと設定情報を保存しているファイルです。では、このVagrantfileを書き換えてネットワークの設定と使用領域を変更しましょう。それぞれの項目はコメントアウトされているので、コメントを解除さいて数値を書き換えましょう。

```rb:Vagrantfile
Vagrant.configure(2) do |config|

  # ...

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  config.vm.network "forwarded_port", guest: 3000, host: 3080

  # ...

  config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
     vb.memory = "4096"
   end
  
  # ... 
end
```
guest、hostの部分をポート番号3000番になるように書き換え、memoryも4GBにしました。

#起動とSSH接続
仮想マシンの起動

```
$ vagrant up
```

起動後にSSH接続

```
$ vagrant ssh
```

SSH接続を終了

```
$ exit
```

仮想マシンの終了

```
$ vagrant halt
```

# Gitのインストール
Gitはバージョン管理を行うツールです。この後使用するツールは "git clone" というコマンドを使ってインストールするので、Gitをインストールします。

```
$ sudo yum install git
$ git --version
git version 1.7.1
```

最新のGitを入れる場合には
http://qiita.com/akata/items/57c81ae969255e3c9a70
の記事を参照してみてください。

# rbenvのインストール
rbenvはRubyのバージョンを簡単に切り替えられるものです。

```
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
```

rbenvコマンドが~/.rbenv/binにあるので、パスを通す

```
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
```
Ubuntuの場合は ~/.bash_profile の代わりに ~/.bashrc 
Zshの場合は ~/.bash_profile の代わりに ~/.zshrc

```
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
```
シェルに rbenv init を追加して呼び出せるようにしましょう。

```
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
```

先ほどと同じくUbuntuとZshの場合は ~/.bash_profile を書き換えてください。
確認してみましょう。

```
$ rbenv -v
rbenv 0.4.0-138-g4d0c289
```
OKです。

```
bash: rbenv: command not found
```

と表示されてしまった場合は、 "\$ exec $SHELL" というコマンドを使用するか、sshを再起動させてみてください。

# ruby-buildのインストール
ruby-buildはUNIX-like（UNIXのような）なシステムでrbenvと併用することで、簡単にRubyをインストールするためのツールです。早速導入しましょう。

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

これで、 "\$ rbenv install" というコマンドを使用できるようになりました。

# Rubyのインストール
まず、Rubyのどのバージョンがインストールできるか確認してみましょう。

```
$ rbenv install -l
```

インストール可能なRubyの一覧が表示されます。今回インストールするRails4.2では推奨がRuby2.1になっているので、最新のバージョンもありますが、2.1.0をインストールしましょう。

```
$ rbenv install 2.1.0
```

しかし、エラーが出てしまいました。

```
...

BUILD FAILED 

...
```

公式のwiki（ https://github.com/sstephenson/ruby-build/wiki ）を見るとどうやらRubyのバージョン上の問題のようです。wiki上で推奨されるツールをインストールしましょう。

```
$ sudo yum install -y gcc openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel
```

再度実行

```
$ rbenv install 2.1.0
```

今度は大丈夫そうです。確認してみましょう。

```
$ rbenv versions
  2.1.0
```
versionsはインストールされているバージョンの一覧を見ることができます。
Rubyのバージョンをシステム全体に適用するには global で指定します。

```
$ rbenv global 2.1.0
$ rbenv versions
* 2.1.0 (set by /home/vagrant/.rbenv/version)
$ ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]
```

"\$ rbenv versions" で "*" が付いているものが現在使用しているRubyバージョンになります。また、rubyのコマンドでも確認できます。rbenvのバージョンの切り替えなど、その他の機能についての説明は割愛します。

# Ruby on Rails のインストール
RailsはRubyのgemパッケージとして配布されています。gemというのはRubyのライブラリです。gemパッケージは gem install コマンドを使ってインストールできます。

```
$ gem install rails
```

ここですんなりと終わるはずなのですが、何も動作しないまま数分が経過して・・・

```
ERROR:  While executing gem ... (Gem::RemoteFetcher::UnknownHostError)
    no such name (https://api.rubygems.org/quick/Marshal.4.8/mime-types-1.16.gemspec.rz)
```

というエラーが。どうやらrailsのgemパッケージに関連するmime-typesというgemパッケージが見つからないということ。　https://rubygems.org/ で検索をかけたところ https://rubygems.org/gems/mime-types 実際にはあるようです。別途でインストールしましょう。

```
$ gem install mime-types
```

mime-typesインストール後に再度Railsをインストール

```
$ gem install rails
```

無事インストールできました。確認しましょう。

```
$ rails -v
Rails 4.2.0
```

これで環境構築終了です。



# 参考文献
Vagrant日本語ドキュメント：　http://lab.raqda.com/vagrant/index.html
Vagrant で Ruby on Rails 4 の環境構築：　http://qiita.com/Salinger/items/20f466ffe7cc0c04b010
LinuxにRuby on Railsをインストールする： http://tsuchikazu.net/linux_ruby_on_rails_install/
GitHub rbenv： https://github.com/sstephenson/rbenv
GitHub ruby-build： https://github.com/sstephenson/ruby-build
Ruby on Rails:Download：　http://rubyonrails.org/download/