Railsチュートリアルに従ってたらrails newでエラーが出る

初めてRuby on Railsを使ってみる初心者です。
「Ruby on Rails」でググってWikipediaの次に出てくるチュートリアル( http://railstutorial.jp/ )を参考に進めることにしました。

しかしこのチュートリアル通りに進めるとエラーが出たので、記録を残しておきます。
同じチュートリアルを参考にする方の参考になれば幸いです :sushi: 

## 結論から言うと
RubyとRailsのバージョンは最新版を使おう。



## 環境
CentOS7 on VirtualBox



## やったこと
###1. rvmインストール
インストール手順は割愛。

確認
`# rvm -v`


###2. Rubyインストール
チュートリアルに示されている通りに、2.0.0(安定版？)をインストール。
`# rvm install 2.0.0`

確認
`# ruby -v`

Gemのバージョンを合わせる。
`# gem update --system 2.0.0`


### 3. Railsインストール
こちらも、チュートリアルに示されている通りに、4.0.5をインストール。
`# gem install rails --version 4.0.5`

確認
`# rails -v`


###4. Rails用ディレクトリ作成
非rootユーザのホームに作ることにします。
`# su - namiki`
`$ mkdir rails_projects`
`$ cd rails_projects`


## プロジェクト新規作成でエラー
rails new を実行すると…
`$ rails new newprj`

この時のエラーメッセージを残し忘れてしまいましたが、
「`gem install json -v '1.8.2'`を実行しろ」とのエラーが出ました。
bundle install でこけてるようです。

言われたとおりにインストール。
`$ su -`
`# gem install json -v '1.8.2'`

すると、こんなエラーが出る。
*/bin/install: 通常ファイル `/usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/lib/usr/local/rvm/rubies/ruby-2.0.0-p598/lib/ruby/site_ruby/2.0.0/x86_64-linux/json/ext' を作成できません: そのようなファイルやディレクトリはありません*



##原因を調べてみる
ディレクトリがないと言われるので、ディレクトリ構造を見てみる。

ここまでは普通にある。
`# ll /usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/lib`

これもある。
`# ll /usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/lib/json/ext`

つまり、間にこれが挟まってるのがおかしい。
*/usr/local/rvm/rubies/ruby-2.0.0-p598/lib/ruby/site_ruby/2.0.0/x86_64-linux*

怪しいところを探す。
`# cd /usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/`
`# grep -r -i '/usr/local/rvm/rubies/' ./`

ヒットしたファイルを書き換えてみる。
`# vim ./ext/json/ext/generator/Makefile`

```mf:Makefile
RUBYLIBDIR = /usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/lib$(sitelibdir)$(target_prefix)
RUBYARCHDIR = /usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/lib$(sitearchdir)$(target_prefix)
```
　　　↓↓↓ $(sitelibdir) を削除

```mf:Makefile
#RUBYLIBDIR = /usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/lib$(sitelibdir)$(target_prefix)
RUBYLIBDIR = /usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/lib$(target_prefix)
#RUBYARCHDIR = /usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/lib$(sitearchdir)$(target_prefix)
RUBYARCHDIR = /usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/lib$(target_prefix)
```

bundle install でこけてたようなので、ここで実行してみる。
`# bundle install`

通った！！



##rails new 再チャレンジ


`# su - namiki`
`$ cd rails_projects`
`$ rails new newprj`

*/bin/install: 通常ファイル `/usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/lib/usr/local/rvm/rubies/ruby-2.0.0-p598/lib/ruby/site_ruby/2.0.0/x86_64-linux/json/ext' を作成できません: そのようなファイルやディレクトリはありません*

あれれ〜？

さっき修正したMakefileを見てみると
`# vim /usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/ext/json/ext/generator/Makefile`

```mf:Makefile
RUBYLIBDIR = /usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/lib$(sitelibdir)$(target_prefix)
RUBYARCHDIR = /usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/lib$(sitearchdir)$(target_prefix)
```

何故か元に戻っている…

ファイルのタイムスタンプを見てみると
`# ll /usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/ext/json/ext/generator/`
何故か全ファイル更新されていました。
どうやら、rails newの都度インストールし直されるっぽい？

配布元( https://github.com/flori/json )を見ると、先ほど修正したMakefileは自動生成されるものだったようで、お手上げ＼('ω')／



##RubyとRailsのバージョンを上げてみる
JSONのGemのページを見てみると、この1.8.2というのは2015/03/09現在の最新版であることが分かりました。
https://rubygems.org/gems/json

もしかして、Gemだけ最新版というアンバランスな状態がダメなのでは？
ということで、RubyとRailsのバージョンを上げてみることにしました。

本来ならここでrvmを使ってスマートにRubyをバージョンアップしたかったのですが、
`rvm install 2.2.1`の後に`rvm remove 2.0.0`を実行すると、2.2.1ごとアンインストールしてしまいました。
結局、その後入れなおそうとしてもうまく動かず、仮想マシンを作るところからやり直すはめに…

rvmがインストールできたら、RubyとRailsの最新版をインストールする。
`# rvm install 2.2.1`
`# gem install rails`

再々チャレンジ
`# su - namiki`
`$ cd rails_projects`
`$ rails new newprj`

できた！！！

例のMakefileを確認してみます。
`# vim /usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/ext/json/ext/generator/Makefile`

```mf:Makefile
RUBYLIBDIR = $(sitelibdir)$(target_prefix)
RUBYARCHDIR = $(sitearchdir)$(target_prefix)
```

おや？
\$(sitelibdir)\$(target_prefix) の前についていた /usr/local/rvm/gems/ruby-2.0.0-p598/gems/json-1.8.2/lib がありませんね。
これで正しいパスを指定するようになったようですが、原因は何だったのでしょう…

何はともあれ、ようやくスタート地点に立てました。