Ruby 2.1.0 + Ruby on Rails 4.0.2

Ruby on Railsのデモを走らせるまで非常に手間取った。

RVMでRuby 2.1.0へ

% rvm get stable
% rvm list known
% rvm upgrade ruby-2.0.0 ruby-2.1.0

今回はRubygemsが一括で以降できなかったのであとからちょっとずつ更新。

% rvm list

rvm rubies

   ruby-2.0.0-p353 [ x86_64 ]
=* ruby-2.1.0 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

% rvm gemset list

gemsets for ruby-2.1.0 (found in /usr/local/rvm/gems/ruby-2.1.0)
   (default)
   global
=> rails

% rvm use ruby-2.1.0@rails --default

Rubygemsのアップデート

% rvmsudo gem update --system
% gem -v
2.2.1

Rails 4へ

新たにatomicというライブラリーが必要なので先にこちらをインストールする。

% rvmsudo gem install atomic

Railsのアップグレード

% rvmsudo gem update rails

デモ

% rails new demo
% cd demo

Gemfileでコメントアウトされているtherubyracerをコメントインする。そして

% bundle install

今回はこのあとにサーバーを機動させようとしたら以下のエラーがでてはまった。

% rails server          
/usr/local/rvm/gems/ruby-2.1.0@rails/gems/execjs-2.0.2/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
	from /usr/local/rvm/gems/ruby-2.1.0@rails/gems/execjs-2.0.2/lib/execjs.rb:5:in `<module:ExecJS>'
〜以下略〜

Gemfile.lockを見るとちゃんとexecjsもtherubyracerも読み込まれている。

% grep execjs Gemfile.lock 
      execjs
    execjs (2.0.2)
      execjs (>= 0.3.0)

% grep therubyracer Gemfile.lock 
    therubyracer (0.12.0)
  therubyracer

% grep v8 Gemfile.lock
    libv8 (3.16.14.3)
      libv8 (~> 3.16.14.0)
  libv8

arul khairullah: Could not find a JavaScript runtime' but execjs AND therubyracer are in Gemfileによると nodejs を追加したら動いたとのこと。やってみたら確かに動いた。

% sudo aptitude install nodejs