3

当我尝试安装 therubyracer 时,出现以下错误:

Installing therubyracer (0.11.0) with native extensions 
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

        /home/carlos/.rbenv/versions/1.9.3-p327/bin/ruby extconf.rb 
checking for main() in -lpthread... yes
checking for v8.h... yes
creating Makefile

make
compiling script.cc
compiling v8.cc
compiling backref.cc
compiling value.cc
compiling accessor.cc
compiling trycatch.cc
compiling primitive.cc
compiling external.cc
compiling date.cc
compiling exception.cc
compiling init.cc
compiling template.cc
compiling message.cc
compiling stack.cc
compiling gc.cc
compiling string.cc
compiling handles.cc
compiling function.cc
compiling heap.cc
compiling invocation.cc
compiling locker.cc
compiling object.cc
compiling array.cc
compiling constants.cc
compiling rr.cc
compiling signature.cc
compiling constraints.cc
compiling context.cc
context.cc: In static member function ‘static VALUE rr::Context::SetData(VALUE, VALUE)’:
context.cc:81:3: error: no matching function for call to ‘v8::Context::SetData(rr::String)’
context.cc:81:3: note: candidate is:
In file included from rr.h:4:0,
                 from context.cc:1:
/usr/include/v8.h:3721:8: note: void v8::Context::SetData(v8::Handle<v8::Value>)
/usr/include/v8.h:3721:8: note:   no known conversion for argument 1 from ‘rr::String’ to ‘v8::Handle<v8::Value>’
make: *** [context.o] Error 1


Gem files will remain installed in /home/carlos/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/therubyracer-0.11.0 for inspection.
Results logged to /home/carlos/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/therubyracer-0.11.0/ext/v8/gem_make.out
An error occurred while installing therubyracer (0.11.0), and Bundler cannot continue.
Make sure that `gem install therubyracer -v '0.11.0'` succeeds before bundling.

我不知道发生了什么。

4

4 回答 4

4

实际上,这有点棘手。

我使用我的自定义dotfiles,所以,我~/.dotfiles/bin在我的 PATH 中。

我还注意到这个问题与 python v3 vs v2 有关

所以,修复很简单,不会破坏我的系统:

ln -s /usr/bin/python2 ~/.dotfiles/bin
reload
gem install libv8 --verbose
bundle

像这样离开我Gemfile

[...]
gem 'therubyracer', :require => 'v8', :platforms => :ruby
[...]

BOOM,它奏效了。

谢谢你们的帮助。抱歉延迟回复。

干杯


编辑

问题已在较新的 therubyracer 版本 (0.11.1) 中得到修复。

于 2012-12-29T15:08:08.467 回答
3

我的 ArchLinux 也有同样的问题。这是一个已知问题。在archlinux上对我有用的解决方法是锁定到0.10.2,通过添加以下行Gemfile

gem 'therubyracer', '0.10.2', :platforms => :ruby

我已经对此进行了测试,它至少可以在 64 位上运行。希望它也对你有用。

于 2012-12-22T18:29:49.267 回答
2

我强烈建议使用外部 Node.js(我确信有一个官方包),然后使用sstephenson / execjs

如果您使用的是 Rails,它已经依赖于ExecJS,因此您可以删除对therubyracer、捆绑、安装 Node.js 的依赖,一切顺利。

于 2012-12-22T18:35:05.827 回答
1

您需要安装 libv8 3.11.x 以获取最新版本的 therubyracer。所以尝试更新 libv8 然后做捆绑。

于 2012-12-22T02:26:26.183 回答