therubyracer・nokogiri・libv8の3大つまづくgem

Pocket

bundle install一筋縄で行かない3大Gemとして(私の中で)おなじみのnokogiri, libv8, therubyracerで躓いた際のメモです。

nokogiriでつまづいた事例

libxml2でつまづく事が多い印象。

libxml2のインストールでエラーが起きているけど、そもそもlibxml2は存在する

システムのものを使ってもらおうという事で、nokogiriインストールの際にlibxml2の場所を指定してみる

こちらで解決。同様にnokogumboでも同じようにlibxml2のエラーが出た場合、build.nokogumboで同じ内容を追加すれば大丈夫。

therubyracer, libv8でつまづいた事例

ruby2.2で、以下のようなメッセージが登場。

との事なので–with-v8-dirについて調べた。

v8とは

GoogleのオープンソースハイパフォーマンスJavaScriptエンジンである。
therubyracerはこのv8をrubyから使えるようにしているgemだそうな。

この辺のインストールで、環境によってバージョンが違う問題があり、ググれども同じ問題で躓いている人は沢山見つかるが、その方法を試しても自分の環境ではうまく行かないぞ!という事態が起きたりする。

このあたりにつまづいたお友達は誰もが一度は「therubyracer 0.11.0問題まとめ」を読んだ事があると思う。
「応援とフィードバックは大事」という事で記事のご紹介ついでに厚い御礼を申し上げたい。とてもわかりやすかったです。ありがとうございます。

therubyracerとlibv8はマシンによってバージョンが異なる

色々やってみてるけど全然入らないというお友達は自分の環境をチェックして、入れるべきバージョンを確かめよう。

自分の環境の確かめ方は以下

私はx86_64-darwin_13なので、以下のコマンドでどのバージョンを入れるべきか確認。

therubyracerはよくわからないが(結果0.12.3で動いた。)libv8は3.16.14.15でOKのはず。
やだ、私のバージョンどうなってるのかしら…と不安になったらgem list {gem}で自分の環境に入っているバージョンを確かめよう。

いざインストール

色々試してみたけれども、一番安定している方法っぽい「brewでv8をインストールしておいて、optionでそちらを使ってもらうように指定する」というやり方でいく事にする。

こんなかんじに。
brew –prefixってするとインストール先を返してくれるのはとても便利だなぁ。

という訳でこれで無事にtherubyracerがインストールされた。
bundle installされた問題のgemたちのバージョンは
・nokogiri 1.6.7.2
・libv8 3.16.14.13
・therubyracer 0.12.2 with native extensions
という感じになった。

therubyracerはこのプロジェクトに本当に必要なのかしら?と考える事も大切

therubyracer considered harmful」こちらのブログで言及されている通り、そもそもtherubyracerとのお付き合いも考えないといけない。
そもそもなぜ最初にtherubyracerがコメントアウトされているかというと
Why is the gem therubyracer commented out by default in Gemfile?
もし他のJSライブラリがマシンに入っているならRails的にはそっちを使えるし、別に必須じゃないんだよっていう事らしい。

参考記事でも本番環境にExecJSインストールするのはよろしくないと記載されているし
asset pipelineに使っているだけだし、productionにはExecJS導入しないでrake assets:precompileなどしてコンパイル済のasset出しているよ〜って人が多いと思うし
developmentだけで使うなら別にtherubyracerじゃなくても、node.jsでいいかもしれない。

よくわかんないけどググったら出てきたgem追加したら解決したぞ、とか、コメントアウトしておくと平和だからそっとしておこう…みたいな場当たり対応をするよりも
gemのそれぞれが何をしていてどういう関係性であるかをしっかり把握しておかないと、とっても怖いなぁと改めて思うのでした。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です