El Capitanで therubyracer 0.11.4 をどうにかインストールしたかったけどできなかった
JaVaScriptエンジンである v8 をrubyで使えるようにするための therubyracer ですが、インストールにはいつも何かしら問題が起きます。
「therubyracer」で検索すると、インストールできなかった場合の対処法が1ページ目を占めるくらい利用者の頭を悩ますところですが、つい最近自分も悩んで結局解決できなかったので、それを書きとめます。
Rails4.0.0案件を動かしたかった
昔の案件で、
- Rails4.0.0
- ruby2.0.0
のプロジェクトを検証するために、ElCapitanで動かそうとしました。
この条件下では、therubyracerのバージョンを特に指定しなければ、0.11.4
をインストールしようとします。最初、てっきりRails4.0.0では0.11.4しか動かない、と思い込んでいたのがそもそもの間違いでした。
ビルド時のオプションを指定しないとエラー
ソースコードを配置して
bundle install
をすると、therubyracerの箇所で以下のようなエラーになります。
(省略)
checking for v8.h... no
*** extconf.rb failed ***
(省略)
v8が見つからないと言われます。ただ、v8は入ってはいます。
ビルド時のオプションを指定してもエラー
を参考にすれば、世の中のtherubyracer問題のほとんどが解決できる気がします。
すなわち、ビルド時のパスを指定します。
bundle config --local build.libv8 --with-system-v8
bundle config --local build.therubyracer --with-v8-dir=/usr/local/opt/v8
or
bundle config --local build.therubyracer --with-v8-dir=/usr/local/opt/v8-315
そして、bundle install
すると
(省略)
checking for v8.h... yes
(省略)
2 warnings and 1 error generated.
make: *** [context.o] Error 1
v8は認識するようになりましたがエラーが起きました。
bundle update libv8
や
bundle config --local build.libv8 --with-cxx=/usr/local/bin/g++-4.2
をやってみても結果は同じでした。
諦めてtherubyracerを最新にする
0.11.4
は古いため、最新の0.12.2
を指定します。
$ vim Gemfile
gem 'therubyracer', :platforms => :ruby
↓
gem 'therubyracer', '>= 0.12.2', :platforms => :ruby
$ bundle install
...
Installing libv8 3.16.14.15 (was 3.11.8.17)
Installing therubyracer 0.12.2 (was 0.11.4) with native extensions
...
Bundle complete! 37 Gemfile dependencies, 118 gems now installed.
ついでにlibv8もアップグレードされ最新版が入り、問題なく完了しました。
そして、アプリを起動しても問題なく動きました。
結論
- ElCapitanではtherubyracer0.11.4は入らない
- Rails4.0.0でもtherubyracer0.12.2は動くので、バージョンアップすればいい