在Mac OS X Lion上,“gem install therubyracer”失败

时间:2012-06-05 22:21:51

标签: ruby rubygems v8

我很感激帮助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(通过自制程序)

11 个答案:

答案 0 :(得分:106)

这对我有用:

$ gem uninstall libv8
$ gem install therubyracer

(非常感谢http://www.ruby-forum.com/topic/4306127

答案 1 :(得分:43)

gem uninstall libv8
brew install v8
gem install therubyracer

答案 2 :(得分:39)

但是,为什么会发生这种情况,你问?为什么卸载libv8并重新安装therubyracer可以解决问题?

答案位于错误消息的底部(来自orig post)。忽略关于

的内容
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在<{1}}中 include_path

这就是为什么卸载{em>所有版本的libv8-3.11.8.13然后重新安装libv8-3.3.10.2的原因。因为没有方法libv8的{​​{1}}的所有版本都已完全删除,而确实拥有<{em>}的therubyracer重新安装libv8时重新安装方法include_path路径。

答案 3 :(得分:15)

考虑到没有,如果以上对我100%有效,我想我会发布什么(作为rails项目的一部分):

gem uninstall libv8
bundle update therubyracer

这确保我获得了最新的therubyracer,以及更新版本的libV8,并且似乎解决了我遇到的多个问题,从缺少的libv8.a文件到未定义的方法

答案 4 :(得分:12)

最后我使用了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 Moutain Lion

答案 5 :(得分:10)

如果您需要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

有关详细信息,请参阅this issue

你可能不需要最后一行-- --with-system-v8,但我这样做只是为了安全,因为我看到它在我运行命令时开始执行Fetching: libv8-3.11.8.17-x86_64-darwin-13.gem (1%) ...

无论如何,当所有其他事情都没有时,它对我有用。

答案 6 :(得分:7)

对于在Mac OSX 10.8 Mountain Lion尝试使用gem 'therubyracer', '0.11.0'升级 Gemfile 时遇到此问题的任何人,只需升级系统libv8 gem就可以为我工作(无需卸载任何其他必要的宝石):

$ gem update libv8
$ bundle install

修改

如果您使用Travis-CI(或我认为位于其他服务器上的其他CI工具),您还需要明确地将libv8 gem添加到 Gemfile 中:

<强>的Gemfile

gem 'libv8', '3.11.8.3'
然后像往常一样bundle install。请注意,libv8可能需要花费大量时间进行安装,而且我注意到它可能最终导致重复Travis CI's timeout limits,从而导致构建失败。您可以稍微缓解这一点,不包括构建中的开发环境gem:

<强> .travis.yml

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

更新

是的,几乎所有我的Travis构建超时并因此而失败。如果有人知道解决这个问题的方法(我希望“降级therubyracer”是最后的手段),请发表评论!

更新2

这可能不适用于所有应用,但似乎我的Rails 3.2.9应用实际上并不需要therubyracerlibv8。从我的 Gemfile 中删除这些宝石后,我确认我的规格已经通过,再次推送到Travis并成功构建。所以,我想摆脱那些宝石(如果你不确定你真的需要它们)至少值得一试。

更新3

感谢Paul Annesley确认如果您使用的是Mac OS X 10.8 Mountain Lion,那么您根本不需要therubyracer gem,因为操作系统已经捆绑了Apple JavaScriptCore,它自己的Javascript跑步者。在最初答案的时候,我在Snow Leopard上,因此需要它。

答案 7 :(得分:4)

对我来说,删除Gemfile.lock文件并运行bundle install是有用的。

答案 8 :(得分:3)

OSX 10.8.2,ruby 1.9.3p125

以上都没有为我工作......我厌倦了为我的环境找到合适的宝石,所以我只是软链接到g ++目标,这些东西都没有了:

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

对远程部署没有帮助,但在我的工作站上完成工作。

答案 9 :(得分:1)

我遇到了类似的问题,但它也抱怨没有找到g ++ - 4.2。我做了安装了XCode命令行工具,但它正在寻找/usr/bin/g++-4.2,我有g ++(这是一个指向llvm-g ++ - 4.2的符号链接)。无论如何,我刚刚创建了一个符合g ++的符号链接,并再次尝试了捆绑安装......它有效!

$ cd /usr/bin

$ sudo ln -s g++ g++-4.2

答案 10 :(得分:0)

有同样的错误,这对我有用:

  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

  4. 如果您正在升级therubyracer gem,您可能还想在此之后运行bundle update therubyracer。 (考虑指定版本号)

    这是在Mac 10.6(Snow Leopard)上。