【Rails】therubyracerとlibv8がインストールできない問題

スポンサーリンク

よくある話題ですが情報が散らばってるので対応策をまとめておきます。

エラー内容

therubyracerが Gemfile に記述されている状態でbundle installを実行すると以下のエラーでインストールできません。libv8therubyracerの依存関係でインストールされます。

2 errors generated.
make[1]: *** [/Users/tasukujp/testapp/.bundle/ruby/2.3.0/gems/libv8-3.16.14.13/vendor/v8/out/x64.release/obj.target/v8_base/src/accessors.o] Error 1
make: *** [x64.release] Error 2
/Users/tasukujp/Documents/testapp/.bundle/ruby/2.3.0/gems/libv8-3.16.14.13/ext/libv8/location.rb:36:in `block in verify_installation!': libv8 did not install properly, expected binary v8 archive
'/Users/tasukujp/Documents/testapp/.bundle/ruby/2.3.0/gems/libv8-3.16.14.13/vendor/v8/out/x64.release/obj.target/tools/gyp/libv8_base.a'to exist, but it was not found (Libv8::Location::Vendor::ArchiveNotFound)
  from /Users/tasukujp/testapp/.bundle/ruby/2.3.0/gems/libv8-3.16.14.13/ext/libv8/location.rb:35:in `each'
   from /Users/tasukujp/testapp/therubyracer/.bundle/ruby/2.3.0/gems/libv8-3.16.14.13/ext/libv8/location.rb:35:in `verify_installation!'
  from /Users/tasukujp/testapp/therubyracer/.bundle/ruby/2.3.0/gems/libv8-3.16.14.13/ext/libv8/location.rb:26:in `install!'
    from extconf.rb:7:in `<main>'
...
An error occurred while installing libv8 (3.16.14.13), and Bundler cannot continue.
Make sure that `gem install libv8 -v '3.16.14.13'` succeeds before bundling.

今回試したOSのバージョンは以下の通りです。

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.11.6
BuildVersion:   15G1217
$ ruby -rubygems -e 'puts Gem::Platform.new(RUBY_PLATFORM)'
x86_64-darwin-15

最新バージョンのlibv8を使用

手っ取り早い解決法はlibv8のバージョンを上げることでした。Gemfile.lockを参照すると以下のような形式になっているかと思います。libv83.16.14.133.16.14.153.16.14.19に上げる事で正常にインストール可能です。

    libv8 (3.16.14.13)
...
    therubyracer (0.12.2)
      libv8 (~> 3.16.14.0)
      ref

v8-315を使用

既存プロジェクトでGemfile.lockのバージョン変えれないという方はv8-315をインストールしてGemインストール時に使用するように指定してください。

$ brew tap homebrew/versions
$ brew install v8-315

# libv8をインストールする場合に必要
$ bundle config --local build.libv8 --with-system-v8
# therubyracerをインストールする場合に必要
$ bundle config --local build.therubyracer --with-v8-dir=/usr/local/opt/v8-315

$ bundle install

そもそもtherubyracerって何?

therubyracer の事や libv8 の関係は以下のリンク先など参照して下さい。

 therubyracer considered harmful - なるせにっき
 なぜRailsでtherubyracerのコメントを外さなきゃいけないのか - kz-engineer -SCRAP-
 therubyracer 0.11.0 問題まとめ - 自称すーじー。
 GitHub - cowboyd/libv8: Ruby gem binary distribution of the V8 JavaScript engine
 GitHub - cowboyd/therubyracer: Embed the V8 Javascript Interpreter into Ruby