web-dev-qa-db-ja.com

Mac OS X Lionで「gem install therubyracer」が失敗する

gem install therubyracer動作します。エラーは次のとおりです。

$ gem install therubyracer
Building native extensions.  This could take a while...
ERROR:  Error installing therubyracer:
    ERROR: Failed to build gem native extension.

        /Users/david/.rvm/rubies/Ruby-1.9.3-p194/bin/Ruby extconf.rb
checking for main() in -lobjc... yes
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --Ruby=/Users/david/.rvm/rubies/Ruby-1.9.3-p194/bin/Ruby
    --with-objclib
    --without-objclib
extconf.rb:15:in `<main>': undefined method `include_path' for Libv8:Module (NoMethodError)

エラーの前に実行したいくつかの注目すべき手順を次に示します。彼らはうまくいきました:

$ gem install libv8
$ brew install v8

私の環境は:

  • Mac OS X Lion 10.7.4
  • Ruby 1.9.3p194(2012-04-20リビジョン35410)[x86_64-darwin11.4.0](rvm経由)
  • V8バージョン3.9.24(homebrew経由)
71
David J.

これは私のために働いた:

$ gem uninstall libv8
$ gem install therubyracer

http://www.Ruby-forum.com/topic/4306127 に大きな感謝

106
David J.
gem uninstall libv8
brew install v8
gem install therubyracer
43
Ken Mazaika

しかし、なぜこれが起こっているのですか?そして、なぜ_libv8_をアンインストールしてtherubyracerを再インストールすると問題が解決するのですか?

答えはエラーメッセージの下部にあります(元の投稿から)。についてのものを無視

_probably lack of necessary libraries and/or headers
_

これは、そのエラーメッセージを書いた人による誤った仮定です。下部には、Rubyがそれについて何を言っているかが表示されます。

_undefined method `include_path' for Libv8:Module
_

私の場合、_therubyracer-0.9.8_を_bundle install_と一緒にインストールしようとしていたのですが、何らかの理由で、_libv8-3.11.8.13_のコピーを使用しようとしていました。他の宝石の依存関係。

_therubyracer.gemspec_には_s.add_dependency "libv8", "~> 3.3.10"_が含まれているため、新しいバージョンを使用しようとした理由がわかりません。そして、私の_Gemfile.lock_はlibv8 (3.3.10.2)を使用するように言っています。しかし、悲しいかな、それは実際に起こっていたことです。

そして、_Libv8:Module_にはnotが_include_path_のメソッド_libv8-3.11.8.13_を持っているが、それはdoesin _libv8-3.3.10.2_

そのため、_libv8_のバージョンのallをアンインストールしてからtherubyracerを再インストールすることができます。 _libv8_のすべてのバージョンにないメソッド_include_path_は完全に削除され、_libv8_そのは持っていますincludeを再インストールすると、メソッドtherubyracerパスが再インストールされます。

40
Mars Redwyne

上記が100%私のために働いた場合は何も考慮せず、私は(Railsプロジェクトの一部として)何をしたかを投稿すると思いました:

gem uninstall libv8
bundle update therubyracer

これにより、最新のtherubyracer、およびlibV8の最新バージョンを確実に入手し、libv8.aファイルの欠落から未定義のメソッドまで、私が直面していた複数の問題を解決しているようです。

15
Abe Petrillo

最後に、ソリューションとしてtherubyracer 0.11.0beta5を使用します。

Therubyracer(0.11.0beta5)の使用

gemfileに以下を追加

gem 'therubyracer', '~> 0.11.0beta5'
group :libv8 do
  gem 'libv8', "~> 3.11.8"
end

bundle install

Mac OSX 10.8マウンテンライオン

12
szpapas

_0.11.3_が必要で、失敗した場合は、これをMac OS X 10.9に試してみてください...

_gem uninstall libv8
brew install v8
gem install libv8 -- --with-system-v8
gem install therubyracer -v '0.11.3' -- --with-system-v8
_

詳細については、 この問題 を参照してください。

おそらく最後の行に_-- --with-system-v8_は必要ありませんが、コマンドを実行したときにFetching: libv8-3.11.8.17-x86_64-darwin-13.gem (1%)を実行し始めたので、安全にするためにそれを行いました...

とにかく、他のすべてがうまくいかなかったとき、それは私のために働いた。

10
cwd

Mac OSX 10.8 Mountain LionでGemfileを_gem 'therubyracer', '0.11.0'_にアップグレードしようとしたときにこの問題が発生した場合は、システムをアップグレードするだけ_libv8_ gemは私のために働いた(他のgemのアンインストールは不要):

_$ gem update libv8
$ bundle install
_

編集

Travis-CI (または他のサーバーにある他のCIツール)を使用する場合、_libv8_ gemを明示的に追加する必要がありますGemfileも:

宝石ファイル

_gem 'libv8', '3.11.8.3'
_

その後、通常どおり_bundle install_。 _libv8_のインストールにはかなりの時間がかかることに注意してください。これが原因で終了する可能性があることに気付きました Travis CIのタイムアウト制限 、ビルドの失敗。ビルドに開発環境のgemを含めないことで、これをわずかに軽減できます。

。travis.yml

_# ...
bundler_args: --binstubs=./bundler_stubs --without development
_

更新

ええ、ほとんどすべてのTravisがタイムアウトを作成し、このために失敗します。誰かがこの問題を解決する方法を知っているなら(「ダウングレードtherubyracer」が最後の手段であることを望みます)、コメントを残してください!

更新2

これはすべてのアプリで機能するとは限りませんが、Rails 3.2.9アプリは実際にはtherubyracerや_libv8_を必要としなかったようです。これらのgemをGemfileから削除した後、仕様が合格し、Travisに再度プッシュされ、正常にビルドされたことを確認しました。したがって、これらの宝石を取り除くことは(実際にそれらが必要かどうかわからない場合)、少なくとも試してみる価値があります。

アップデート3

Paul Annesley に感謝します。MacOS X 10.8 Mountain Lionを使用している場合、therubyracer gemは必要ありません。OSには既にApple JavaScriptCore、独自のJavascriptランナー。最初の回答の時点で、私はSnow Leopardを使用していたため、それを必要としていました。

7
Paul Fioravanti

私にとっては、Gemfile.lockファイルを削除してbundle installは魔法のように働いた。

4
Alex Weber

OSX 10.8.2、Ruby 1.9.3p125

上記のどれもうまくいきませんでした...私は自分の環境に合った宝石を探すことにうんざりしていましたので、g ++ターゲットにソフトリンクしました。

Sudo ln -s `which g++` /usr/bin/g++-4.2

リモート展開にはそれほど役立ちませんが、私のワークステーションで仕事をしてください。

3
Colby Blair

同様の問題が発生しましたが、g ++-4.2が見つからないという不満もありました。 I did XCodeコマンドラインツールがインストールされていますが、/ usr/bin/g ++-4.2を探していました。g++(llvm-g ++-4.2を指すシンボリックリンク)を探していました。とにかく、g ++へのシンボリックリンクを作成し、バンドルのインストールを再試行しました。

$ cd /usr/bin

$ Sudo ln -s g++ g++-4.2

1
richardun

同じエラーがあった場合、これは私のために働いた:

  1. コンソールから:gem uninstall libv8

  2. Gemfileに次を追加します。

    gem 'therubyracer', :platforms => :Ruby, :require => 'v8'
    gem 'libv8', '~> 3.11.8'  # Update version number as needed
    
  3. コンソールから:bundle install

Therubyracer gemをアップグレードしている場合は、bundle update therubyracerその後も。 (バージョン番号の指定を検討してください)

これはMac 10.6(Snow Leopard)でした。

0
michaeldwp