一からRuby on Rails備忘録

データベース作成時に”Could not find a JavaScript runtime”エラー

CentOSにRuby1.8.7、Rails3.2.11インストール後、データベース作成時に"Could not find a JavaScript runtime"エラーが発生しました。エラー解決時の対応をまとめました。

$ rake db:create
  :
rake aborted!
Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
/home/rails/blog/config/application.rb:7
/home/rails/blog/Rakefile:5
(See full trace by running task with --trace)

 
1)ExecJSをインストール
 
上記エラーメッセージで
See https://github.com/sstephenson/execjs
とありましたので、サイトを見てみます。
“ExecJS”がJavaScriptランタイムに該当するもののようです。

# gem install execjs

Successfully installed execjs-1.4.0
1 gem installed
Installing ri documentation for execjs-1.4.0...
Installing RDoc documentation for execjs-1.4.0...

 
インストールできました。 再度、データベースを作成します。  

$ rake db:create
 :
rake aborted!
Could not find a JavaScript runtime. See  for a list of available runtimes.
/home/rails/blog/config/application.rb:7
/home/rails/blog/Rakefile:5
(See full trace by running task with --trace)

少しメッセージは変わりましたが、JavaScriptランタイムのエラーが出ています。
 
2)therubyracerをインストール時のエラー
 
下記の記述があって、サイトを見てみると
See https://github.com/sstephenson/execjs
 
execjsがサポートしているランタイムが記載されていましたが、その中の一つである、therubyracerをインストールしてみます。

# gem install therubyracer
 
Fetching: ref-1.0.2.gem (100%)
Fetching: libv8-3.11.8.13-x86_64-linux.gem (100%)
Fetching: therubyracer-0.11.3.gem (100%)
Building native extensions.  This could take a while...
ERROR:  Error installing therubyracer:
        ERROR: Failed to build gem native extension.

        /usr/bin/ruby extconf.rb
checking for main() in -lpthread... yes
creating Makefile

make
g++ -I. -I/usr/lib64/ruby/gems/1.8/gems/libv8-3.11.8.13-x86_64-linux/vendor/v8/include -I. -I/usr/lib64/ruby/1.8/x86_64-linux -I. -Wall -g -rdynamic -fPIC -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fno-strict-aliasing  -fPIC    -c date.cc
make: g++: Command not found
make: *** [date.o] Error 127
 :

 
3)g++コマンドを含むパッケージを調査
 
“make: g++: Command not found”とあるので、g++コマンドを含むパッケージを検索します。

$ yum provides "*g++"
   :
gcc-c++-4.4.6-4.el6.x86_64 : C++ support for GCC
Repo        : base
Matched from:
Filename    : /usr/bin/x86_64-redhat-linux-g++
Filename    : /usr/bin/g++
   :

 
4)gcc-c++インストール
 

# yum install gcc-c++
 
Installed:
  gcc-c++.x86_64 0:4.4.6-4.el6

Dependency Installed:
  libstdc++-devel.x86_64 0:4.4.6-4.el6

Dependency Updated:
  libstdc++.x86_64 0:4.4.6-4.el6

Complete!

 
5)therubyracerを再度インストール
 

# gem install therubyracer
 
Building native extensions.  This could take a while...
Successfully installed therubyracer-0.11.3
1 gem installed
Installing ri documentation for therubyracer-0.11.3...
Installing RDoc documentation for therubyracer-0.11.3...

インストールできました。 再度、データベース作成します。

$ rake db:create

rake aborted!
Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
/home/rails/blog/config/application.rb:7
/home/rails/blog/Rakefile:5
(See full trace by running task with --trace)

 
6)Gemfileに追加してbundleインストール
 
gemコマンドでインストールしただけで、Gemfileに追加してBundleインストールしていませんでした。
 
①bundleのリストで確認  

$ bundle list
 
Gems included by the bundle:
  * actionmailer (3.2.11)
  * actionpack (3.2.11)
  * activemodel (3.2.11)
  * activerecord (3.2.11)
  * activeresource (3.2.11)
  * activesupport (3.2.11)
  * arel (3.0.2)
  * builder (3.0.4)
  * bundler (1.2.3)
  * coffee-rails (3.2.2)
  * coffee-script (2.2.0)
  * coffee-script-source (1.4.0)
  * erubis (2.7.0)
  * execjs (1.4.0)
  * hike (1.2.1)
  * i18n (0.6.1)
  * journey (1.0.4)
  * jquery-rails (2.2.0)
  * json (1.7.6)
  * mail (2.4.4)
  * mime-types (1.19)
  * multi_json (1.5.0)
  * polyglot (0.3.3)
  * rack (1.4.4)
  * rack-cache (1.2)
  * rack-ssl (1.3.2)
  * rack-test (0.6.2)
  * rails (3.2.11)
  * railties (3.2.11)
  * rake (10.0.3)
  * rdoc (3.12)
  * sass (3.2.5)
  * sass-rails (3.2.6)
  * sprockets (2.2.2)
  * sqlite3 (1.3.7)
  * thor (0.16.0)
  * tilt (1.3.3)
  * treetop (1.4.12)
  * tzinfo (0.3.35)
  * uglifier (1.3.0)

therubyracerが入っていません。
 
②Gemfileに追加し、Bundleインストール
 
Gemfileにtherubyracerと依存するlibv8を記述します。
 
下記2行を追加
gem ‘libv8’
gem ‘therubyracer’

$ bundle install
    :
Using libv8 (3.11.8.13)
    :
Using therubyracer (0.11.3)
    :
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

 
7)再度、データベース作成
 
$ rake db:create
 
→成功もエラーも何も表示されませんでした。
 
dbディレクトリにデータベースファイルが作成されているか確認してみます。

$ ls -al
total 12
drwxrwxr-x  2 rails rails 4096 Jan 30 21:02 .
drwxrwxr-x 13 rails rails 4096 Jan 30 21:02 ..
-rw-r--r--  1 rails rails    0 Jan 30 21:02 development.sqlite3
-rw-rw-r--  1 rails rails  355 Jan 22 21:30 seeds.rb
-rw-r--r--  1 rails rails    0 Jan 30 21:02 test.sqlite3

データベースファイルが作成されています。

モバイルバージョンを終了