xyk blog

最近は iOS 開発の記事が多めです。

Rails で「Could not find a JavaScript runtime」エラーが発生した場合の対処

環境:
Ubuntu 12.04 LTS (32bit)
ruby 1.9.3p448
rails 4.0.2

とある Rails アプリケーションを試そうとして

$ git clone https://github.com/hoge/rails_app_sample
$ cd rails_app_sample
$ bundle install --path vendor/bundle
$ bundle exec rake db:migrate RAILS_ENV=development
$ bundle exec rackup config.ru

というかんじで、サーバを起動したところ

Could not find a JavaScript runtime.
See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

というエラーが発生して起動に失敗した。

ググるtherubyracerという gem を追加すればよいらしい。
therubyracer とは JavaScript エンジンである v8 を Ruby から使えるようにする gem とのこと。

Gemfile ファイルにtherubyracerを追加。

gem 'therubyracer'

bundle install

$ bundle install --path vendor/bundle
...
    Installing therubyracer (0.12.0)
...

起動

$ bundle exec rackup config.ru
[2014-01-16 03:31:57] INFO  WEBrick 1.3.1
[2014-01-16 03:31:57] INFO  ruby 1.9.3 (2013-06-27) [i686-linux]
[2014-01-16 03:31:57] INFO  WEBrick::HTTPServer#start: pid=6108 port=9292

今度はエラーは出ず起動した。

しかし、このやり方だと bundle install する度に therubyracer が依存するlibv8のインストール部分で時間がかかってしまうので Ubuntulibv8-dev をインストールすることにした。

$ sudo apt-get install libv8-dev
...
The following NEW packages will be installed:
  libv8-3.7.12.22 libv8-dev
...