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
私の環境は:
これは私のために働いた:
$ gem uninstall libv8
$ gem install therubyracer
gem uninstall libv8
brew install v8
gem install therubyracer
しかし、なぜこれが起こっているのですか?そして、なぜ_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
パスが再インストールされます。
上記が100%私のために働いた場合は何も考慮せず、私は(Railsプロジェクトの一部として)何をしたかを投稿すると思いました:
gem uninstall libv8
bundle update therubyracer
これにより、最新のtherubyracer
、およびlibV8
の最新バージョンを確実に入手し、libv8.aファイルの欠落から未定義のメソッドまで、私が直面していた複数の問題を解決しているようです。
最後に、ソリューションとして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マウンテンライオン
_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%)
を実行し始めたので、安全にするためにそれを行いました...
とにかく、他のすべてがうまくいかなかったとき、それは私のために働いた。
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
」が最後の手段であることを望みます)、コメントを残してください!
これはすべてのアプリで機能するとは限りませんが、Rails 3.2.9アプリは実際にはtherubyracer
や_libv8
_を必要としなかったようです。これらのgemをGemfileから削除した後、仕様が合格し、Travisに再度プッシュされ、正常にビルドされたことを確認しました。したがって、これらの宝石を取り除くことは(実際にそれらが必要かどうかわからない場合)、少なくとも試してみる価値があります。
Paul Annesley に感謝します。MacOS X 10.8 Mountain Lionを使用している場合、therubyracer
gemは必要ありません。OSには既にApple JavaScriptCore、独自のJavascriptランナー。最初の回答の時点で、私はSnow Leopardを使用していたため、それを必要としていました。
私にとっては、Gemfile.lockファイルを削除してbundle install
は魔法のように働いた。
OSX 10.8.2、Ruby 1.9.3p125
上記のどれもうまくいきませんでした...私は自分の環境に合った宝石を探すことにうんざりしていましたので、g ++ターゲットにソフトリンクしました。
Sudo ln -s `which g++` /usr/bin/g++-4.2
リモート展開にはそれほど役立ちませんが、私のワークステーションで仕事をしてください。
同様の問題が発生しましたが、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
同じエラーがあった場合、これは私のために働いた:
コンソールから:gem uninstall libv8
Gemfileに次を追加します。
gem 'therubyracer', :platforms => :Ruby, :require => 'v8'
gem 'libv8', '~> 3.11.8' # Update version number as needed
コンソールから:bundle install
Therubyracer gemをアップグレードしている場合は、bundle update therubyracer
その後も。 (バージョン番号の指定を検討してください)
これはMac 10.6(Snow Leopard)でした。