MacOS XでVagrantにCentOS入れ、Railsアプリ制作、Heroku公開 vol.05

# Rails 開発環境準備

MacOS X Yosemite で Heroku にアプリを公開するまでの環境構築を何回かに分けて書きます。

vol.01 [VirtualBox インストール編](http://qiita.com/hirolog/items/560ce489dce08f555876) 
vol.02 [Vagrant インストール編](http://qiita.com/hirolog/items/79c294da5225827f3f75)
vol.03 [Vagrant box作成編](http://qiita.com/hirolog/items/a57692eae892e7cdb6a7)
vol.04 [VagrantのCentOS 6.5 仮想マシン(box）起動まで](http://qiita.com/hirolog/items/0603c0b8a8c7b89a0cd4)

も合わせてお読み下さい。（というか、先にこれらの操作が必要です）

## サーバの基本設定

vagrantの仮想OSにログインしてください。

```
vagrant ssh
```

今回はホストのMacからしかアクセスしないので、いろいろと悪さする（本来はセキュリティを高めるために必要な）iptablesを無効にします。次回起動時にもoffになるように、chkconfigでも設定。

```
sudo service iptables stop
sudo chkconfig iptables off
```

yumを最新にしておきましょう。これはけっこう時間かかります。

```
sudo yum -y update
```

timezoneも日本にしておきます。たぶん、時間ズレてます。

```
date
※ 時間がズレていたら、以下を実行
sudo cp -p  /usr/share/zoneinfo/Japan /etc/localtime
date
```

その他、各人必要な最小限の設定をしておくと良いと思います。例えば、vimすら入ってないのでvimぐらいは入れておきます。

```
sudo yum -y install vim
````

## Rails 環境設定

### RVM インストール

いきなり ruby や rails を入れても良いのですが（良くはないですが）、ruby も rails も様々なバージョンが存在していて、混在させて切り替えできる方が便利です。
例えば初心者の方なら railstutorial などを学ぶ場合に指定されたバージョンに揃えた方がゼッタイに良いと思います。（挙動をすべて同じにできる）

rubyの複数バージョンを混在させて切り替えを実現するには RVM と rbenv が有名です。
どちらが一方的に優れているということはないので、それぞれのメリットを比較して選ぶと良いと思います。
ここでは RVM を使うことにします。

[RVM 公式サイト](https://rvm.io/)

RVMの公式サイトを開き、トップにわかりやすく表示されているコマンドを2つ叩きます。

2015/03/01現在は以下のようになってますが、必ず最新情報を確認してください。
表示されるメッセージも大事になるので、1つずつ実行。

```
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
```

```
\curl -sSL https://get.rvm.io | bash -s stable
```

2つ目のコマンドを実行すると、以下のような表示が出ると思いますがエラーではありません。

```
  * WARNING: You have '~/.profile' file, you might want to load it,
    to do that add the following line to '/home/vagrant/.bash_profile':

      source ~/.profile
```

指示の通りに実行することにします。.bash_profileに1行を追加しろと言ってます。

vim で .bash_profile を開いて、一番末尾に source ~/.profile を加え、.bash_profileを再読み込みです。

```
vim ~/.bash_profile
（ファイルの末尾に source ~/.profile を加えて上書き保存）
source ~/.bash_profile
```

vimでの修正ができない場合...
困ったら[esc]キーを押した後に :q! と打てば抜け出せます。やり方を調べて頑張って修正しましょう。

rvmがインストールされたかを確認。

```
rvm -v
```

rvm 1.26.10 (latest)のような表示がされればOK（2015/03/01 現在）。

最新版となっているはずですが、なってない場合に意外とハマるのでこのタイミングで改めて最新版を取得してリロード。

```
rvm get head && rvm reload
```

CentOS用に必要なものがないかを確認して、入れておく。これも後々ハマらないようにするポイント！

```
rvm requirements
```

これで RVM の準備が完了です。

### Ruby インストール

さて、Rubyを入れてみましょう。どのバージョンを入れたいでしょうか？

```
rvm list known
```

と打つと、どんなバージョンが存在してるか表示されます。
ここでは最新版ではないですが、安定していると思われる 2.1.5 を入れてみようと思います。

まず、今は ruby が入っていないことを確認。

```
ruby -v
```

rvm で ruby 2.1.5 をインストール。けっこう時間かかります。

```
rvm install 2.1.5
```

コンパイルからインストールまで、一発で通りましたでしょうか？
事前準備を漏れ無く行っていれば時間はかかりますが問題なくインストールされると思います、バージョン情報を確認してみましょう。
その他、合わせて RVM でインストール済の ruby の確認(rvm list)や、RVM で ruby のバージョンを指定して使うためのコマンド(rvm use 2.1.5)も合わせて紹介。

```
ruby -v
rvm list
rvm use 2.1.5
```

## gemsetを作る

rubyが入ったので次は rails なのだけど、その前に ruby と rails のバージョンをセットにして管理するために gemset を作成します。

gemの確認。

```
gem -v
```

2.4.6のようにバージョンが表示されればOK、表示されなかった場合は、

```
rvm rubygems current
```

で入れておく。

gemsetを作ります、今回は rails 4.2 のセットにしようと思うので、

```
rvm gemset create rails42
```

とします。rails42 は gemset名 なので自分がわかりやすい名前を付けておきます。以下のコマンドで存在してる gemset が確認できます。

```
rvm gemset list
```

rails42ができてますか？
createコマンドでは作成するだけなので、この gemset を使うようになっていません。

```
rvm 2.1.5@rails42
```

のように、rvm の後に rubyのバージョン情報@gemset名 と打てば切り替わります。rvm gemset list と打って切り替わってることを確認します。なお、rvm use の use を省略して書いてますが、同じことです。

標準でこのセットを使う場合は、

```
rvm use 2.1.5@rails42 --default
```

と打っておけば、デフォルト設定になります。rvm list defaultなどで確認可能です。まだ rails は入ってません。

## rails インストール

railsを入れましょう。まず

```
rails -v
```

と打ってインストールされてないことを確認します。

何も考えずに最新版を入れるなら、

```
gem install rails
```

ですが、4.2を入れる場合は

```
gem install rails --version="~>4.2.0"
```

のようにバージョン指定が可能です。~>という表記は "4.2.X系の最新バージョン" という意味なのですが、バージョン指定方法はいくつかあるので、気になる方は調べてください。

ここではバージョン指定してインストールします、またドキュメントは不要かなと思うので入れないオプションを付けてます。
（けっこう時間かかります、しかも進捗状況がわからないのでひたすら待つ）

```
gem install rails --version="~>4.2.0" --no-ri --no-rdoc
```

待ってれば完了します、けど、**railsインストール中にエラー**となることがけっこうあります。

```
ERROR:  While executing gem ... (Gem::RemoteFetcher::UnknownHostError)
    no such name (https://api.rubygems.org/gems/rack-1.6.0.gem)
```

のようなエラーです。どのgemでエラーが出るかはわかりません。

このエラー (Gem::RemoteFetcher::UnknownHostError) が出る原因はよくわかってないのですが、慌てずに、**もう一度同じコマンドでインストール**してみましょう。
エラーが出た所から再開し、何事も無かったかのように進むことが多いです。

それでもエラーが多発する（例えば gem 1個進むごとにエラーになる）ようならば、/etc/resolv.confに次の一文を加えてみましょう。

```
options single-request-reopen
```

[参照：RHEL6/CentOS6では、single-request-reopen を必須にしたい…](http://www.kunitake.org/chalow/2012-11-02-1.html)
　

全て終わってインストールできたら、バージョンを確認してみます。

```
rails -v
```

4.2.0がインストールされたようです（2015/03/01 現在）。これで、Railsを使って開発する環境が整いました！

### キーワード

* MacOS X
* VirtualBox
* Vagrant
* CentOS
* Ruby on Rails
* RVM (Ruby Version Manager)
* Heroku