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
データベースファイルが作成されています。