Yosemite で libv8 と therubyracer をインストールする
Mac OS X 10.9 Mavericks 以降だと、libv8 と therubyracer の gem がインストールできないじゃないですか。毎回遭遇するけど、毎回苦しんでいます。
キモは、libv8、therubyracer、OS のバージョンの整合性。あとは定番のオプションを付けること。
http://inoao.hatenablog.com/entry/2014/03/27/183523 に、超便利な表がありました。が、Yosemite が載っていないので、最新版はこうなります。Yosemite = darwin-14 の値は、自分で試してうまくいった組み合わせです。
CPU | OS | OS Version | libv8 | therubyracer |
---|---|---|---|---|
amd64 | freebsd | 8 | 3.3.10.4 | 0.10.2 |
9 | ||||
x86 | darwin | 10 | ||
11 | ||||
linux | ||||
freebsd | 9 | 3.11.8.3 | 0.11.0 | |
x86_64 | darwin | 10 | ||
11 | 3.3.10.4 | 0.10.2 | ||
12 | 3.11.8.3 | 0.11.0 | ||
13 | 3.16.14.3 | 0.12.1 | ||
14 | 3.16.14.7 | |||
linux | 3.11.8.3 | 0.11.0 |
手順としては、まず、自分の OS のバージョンを調べます。
$ ruby -rubygems -e 'puts Gem::Platform.new(RUBY_PLATFORM)'
x86_64-darwin-14
OS X 10.10 Yosemite の場合、darwin-14 になりました。普通に bundle install すると、以下のように失敗します。
$ bundle install --path vendor/bundle
…(略)…
Installing kaminari 0.16.1
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/Users/takah/.rbenv/versions/2.0.0-p353/bin/ruby extconf.rb --without-system-v8
…(略)…
An error occurred while installing libv8 (3.16.14.3), and Bundler cannot continue. Make sure that `gem install libv8 -v '3.16.14.3'` succeeds before bundling. </code>
なので、上記の表を見て、Gemfile と Gemfile.lock のバージョンが合うように修正します。
さらに、ビルドオプションも付けてやります。gem コマンドでインストールするだけなら、以下のように – で区切ってオプションを渡すことができます。
$ gem install libv8 -v '3.16.14.7' -- --with-system-v8
bundle install でインストールする場合、コマンドラインで直接オプションを指定できないので bundle config コマンドを使います。
$ bundle config build.libv8 --with-system-v8
$ bundle config build.therubyracer --with-v8-dir
このコンフィグオプションは build_info に保存されます。
$ cat vendor/bundle/ruby/2.0.0/build_info/libv8-3.16.14.3.info
--with-system-v8
さて、これで bundle install してみましょう。
$ bundle install
一旦 bundle install –path vendor/bundle すると、オプションが .bundle/config に保存されて、次回以降は –path オプション無しでも同じ動作をしてくれます。
うまく行きました! I’m so happy!