如何在10.10 Yosemite上安装therubyracer gem?

101

我无法在Yosemite 10.10上安装therubyracer gem。

这是日志:

11:53  $ gem install libv8 -v '3.16.14.3' -- --with-system-v8
使用以下参数构建本地扩展: '--with-system-v8' 这可能需要一些时间... 成功安装libv8-3.16.14.3 对于libv8-3.16.14.3解析文档 为libv8-3.16.14.3安装ri文档 安装libv8的文档执行完毕,共计用时0秒钟 已安装1个gem
02:05 $ gem install therubyracer -v '0.12.1' -- --with-system-v8
使用以下参数构建本地扩展: '--with-system-v8' 这可能需要一些时间... ERROR: 安装therubyracer失败: ERROR: 无法构建原生扩展的gem。
/usr/local/var/rbenv/versions/2.1.2/bin/ruby extconf.rb --with-system-v8 检查是否存在-lpthread中的main()... 是的 检查是否存在-lobjc中的main()... 是的 检查v8.h是否存在... 否 ***extconf.rb失败*** 由于某种原因(可能缺少必要的库和/或标头),无法创建Makefile。有关更多详细信息,请检查mkmf.log文件。您可能需要配置选项。
提供的配置选项: --with-opt-dir --without-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=/usr/local/var/rbenv/versions/2.1.2/bin/ruby --with-pthreadlib --without-pthreadlib --with-objclib --without-objclib --enable-debug --disable-debug --with-v8-dir --without-v8-dir --with-v8-include --without-v8-include=${v8-dir}/include --with-v8-lib

--without-v8-lib=${v8-dir}/lib 表示不使用特定的v8库。在配置过程中,发现您选择使用系统上找到的V8版本(Libv8 :: Location :: System :: NotFoundError),而不是与libv8 Ruby gem捆绑的版本。然而,无法找到它,请确保您已安装与3.16.14.3兼容的v8版本。如果它位于非标准位置,您可能需要使用特殊的--with-v8-dir选项。 extconf失败,退出码为1。Gem文件将保留在/usr/local/var/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/therubyracer-0.12.1供检查。结果记录在/usr/local/var/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-14/2.1.0-static/therubyracer-0.12.1/gem_make.out中。

你也在使用Yosemite时遇到了问题:D - Dalorzo
我知道,我喜欢成为冒险家 :-P - Nicolas Blanco
1
我也遇到了这个问题,我尝试过使用brew install v8,但是没有成功。 - acrogenesis
@sandelius 检查一下我的答案 - mmln
18个回答

260
gem uninstall libv8
brew install v8
gem install therubyracer
gem install libv8 -v '3.16.14.3' -- --with-system-v8

这是在10.10版本(ruby 2.1.2)中对我有效的唯一方法。

或者尝试gem install libv8 -v 'XX.XX.XX' -- --with-system-v8,并添加适当的gem版本号 :)

针对Mac OS Catalina的更新:

brew tap homebrew/versions
brew install v8@3.15
brew link --force v8@3.15
gem install libv8 -v 'XX.XX.XX' -- --with-system-v8
gem install therubyracer

3
没错,这就是那个没有任何奇怪反应的帮助方法。即使你只是遇到了libv8错误,也要试一下!谢谢。 - pjammer
2
没错,这是正确的方法。特别是如果你已经使用最新的10.10命令行工具重新构建了你的Ruby。 - Pankaj Tyagi
3
在我的电脑上(OS X Yosemite),Ruby 2.1.3 版本可以正常运行。 - Sarah Vessels
4
除此之外,如果你使用bundler并且有一个Gemfile,你可能需要将其调整到刚安装的最新版本。例如,在OS X Yosemite上,我不得不执行以下操作:gem 'therubyracer','0.12.1'(添加了版本)。然后删除Gemfile.lock并执行bundle install。它可以正常工作。 - paneer_tikka
2
这对我也起作用了,在El Capitan上。我认为这更简单,应该被接受的答案。 - rcd
显示剩余6条评论

68
git clone https://github.com/cowboyd/libv8.git
cd libv8
bundle install
bundle exec rake clean build binary
gem install pkg/libv8-3.16.14.3-x86_64-darwin-12.gem #note that libv8 version may change, so tab through files in pkg/, also remember to use the one with version specified

那么只需打包你的项目宝石库即可。

这是在10.10上(ruby 2.1.2)对我起作用的唯一方法。


2
谢谢,但这是libv8,我在说therubyracer gem。 - Nicolas Blanco
2
这是你需要避免与therubyracer有关问题的内容。 - mmln
2
我不在乎是否违反规则。我无法感谢你的足够。你为我节省了一个重要项目的截止日期。 - RubyRedGrapefruit
2
值得一提的是,如果您正在使用Gemfile并且仍然无法安装therubyracer,则可能是因为已经添加了不同版本的libv8到Gemfile.lock中。只需添加gem'libv8','3.16.14.3'(或者是您刚刚手动安装的libv8的确切版本),然后运行bundle update libv8。这样就可以安装therubyracer了。 - Jon Cairns
1
我在编译64位的v8时遇到问题。当我运行'bundle exec rake clean build binary'时,出现了"无法找到v8官方支持的编译器。建议使用GCC v4.4或更高版本"的错误提示。有什么想法吗? - Luis D Urraca
显示剩余3条评论

44

这次没有一个答案适用于我。我必须使用这个:

brew tap homebrew/versions
brew install v8-315

gem install libv8 -v '3.16.14.13' -- --with-system-v8
gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315

bundle install

在rubyracer的Github问题中看到。

希望它能帮助其他人。


谢谢您的回复。其他方法都无法在El Capitan上使用现代版本的依赖 gem(therubyracer 目前在 libv8 方面严重滞后)。 - Matt Mitchell
1
很遗憾,你是对的...每次我更改 Ruby 版本时,这个错误都会让我发疯。 - coding addicted
1
tap homebrew/versions 已被弃用,因此这不再起作用。 - mattp
2
实际上,对我来说gem install therubyracer -- --with-v8-dir=$(brew --prefix v8-315)效果更好。我的Mac中的目录实际上是/usr/local/opt/v8@3.15 - Junji Zhi

26

也许对某些人有用,但我在安装therubyracer时遇到了问题(因为libv8的问题),解决方法是卸载我安装的所有 libv8。然后再安装therubyracer。

$ gem uninstall libv8
$ gem install therubyracer -v '0.12.0'
Fetching: libv8-3.16.14.7-x86_64-darwin-14.gem ( 57%)
Fetching: libv8-3.16.14.7-x86_64-darwin-14.gem (100%)
Successfully installed libv8-3.16.14.7-x86_64-darwin-14
Building native extensions.  This could take a while...
Successfully installed therubyracer-0.12.0
2 gems installed

我希望这能帮助到某个人。


这对我来说似乎有效。但是我想指出,卸载所有版本的libv8 gem的最佳方法是:gem uninstall libv8 -a -x。如果您使用ruby版本管理器(例如rbenv等),那么这仅适用于您当前使用的ruby版本(如果这不明显的话)。 - xentek
这个解决方案对我有效 - El Capitan 10.11.6,Ruby - ruby 1.9.3p448(2013-06-27 revision 41675) - sameera207

13

看起来这个问题已经在上游得到了修复。对我、@aurels、@Mike Causer和@Juanda有效的解决方法如下:

bundle update libv8

7
这对我的Yosemite和Ruby 2.1.5非常有效(通过RVM安装的Ruby)。
gem install libv8 -v '3.16.14.3' -- --with-system-v8

之前在安装 libv8 gem 版本 3.16.14.3 时,出现了错误提示 Gem::Ext::BuildError: ERROR: Failed to build gem native extension.


7

在我的Yosemite和Ruby 2.1.2中,只有这个方法适用:

gem install libv8 -v '3.16.14.3' -- --with-system-v8
brew link --overwrite v8-315 --force
gem install therubyracer -v '0.12.2' -- --with-system-v8

只有这个方法可以解决在ruby 1.9.3p484rubyracer 0.12.3上安装rubyracer的问题。 - Michael Klishevich

6

在删除Gemfile.lock后,我成功地使用了Ruby Racer。

之前: 我通过brew install v8安装了V8,然后执行了gem install libv8 -v '3.16.14.3' -- --with-system-v8

我正在运行10.10 Yosemite操作系统。


4
他们在最新版本的libv8中纠正了这个问题。请参见:https://github.com/cowboyd/libv8/issues/123 您应该从github仓库安装,在rails中,我向我的gemfile添加了一行,如下所示:gem "libv8", git: "git://github.com/cowboyd/libv8.git", submodules: true 编辑: 显然这只解决了部分问题。 我安装了新版本的libv8,但是rubyracer仍然在寻找另一个版本? 还在研究中。

3

我在Yosemite系统上遇到了相同的问题。我的解决方法与上述类似。

使用gem uninstall libv8命令卸载任何可能已安装的内容。

将therubyracer保留在Gemfile中,但删除对libv8的任何明确引用。

运行bundle install命令。

然后,libv8作为依赖项安装成功。


这是我的问题。我有多个版本的libv8相互冲突。清除它们并让bundler解决依赖关系是正确的做法。 - DavidMann10k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接