初めてRuby on Railsを使ってみる初心者です。
「Ruby on Rails」でググってWikipediaの次に出てくるチュートリアル( http://railstutorial.jp/ )を参考に進めることにしました。
しかしこのチュートリアル通りに進めるとエラーが出たので、記録を残しておきます。
同じチュートリアルを参考にする方の参考になれば幸いです
結論から言うと
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
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) を削除
#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
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
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 がありませんね。
これで正しいパスを指定するようになったようですが、原因は何だったのでしょう…
何はともあれ、ようやくスタート地点に立てました。