新手问题 [已解决] libv8 安装提示说出错,但我明明已经安装上了

chairy11 · October 29, 2014 · Last by huacnlee replied at June 14, 2016 · 7138 hits

问题

昨天已经单独安装过很多次了 gem install libv8 -v '3.16.14.7',当时显示 gem 是安装成功的, 然后 bundle install 还是提示如下:

Bundler::GemspecError: Could not read gem at /Users/yebiying/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/cache/libv8-3.16.14.7-x86_64-darwin-13.gem. It may be corrupted.
An error occurred while installing libv8 (3.16.14.7), and Bundler cannot continue.
Make sure that `gem install libv8 -v '3.16.14.7'` succeeds before bundling.

后来就按 google 的一些解法,各种折腾,比如

gem install libv8 -- --with-system-v8
gem update --system 
gem update 

结果 bundle install 还是同样的出错。想再 gem install libv8 -v '3.16.14.7'时,反而出现新的错误提示

gem install libv8 -v '3.16.14.7'
ERROR:  Error installing libv8:
    invalid gem: package is corrupt, exception while verifying: undefined method `size' for nil:NilClass (NoMethodError) in /Users/yebiying/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/cache/libv8-3.16.14.7-x86_64-darwin-13.gem

已经完全 google 不到方案了…… 各位大神,快救救我! 我这是新的 MBP 第一次 bundle install,以前在我的 ubuntu 上没发现过类似的问题……

解决方案 (感谢@kungs提供)

rm /Users/yebiying/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/cache/libv8-3.16.14.7-x86_64-darwin-13.gem
bundle

没有装过,直接用 node.js 好了,很多地方都需要。

rm /Users/yebiying/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/cache/libv8-3.16.14.7-x86_64-darwin-13.gem
bundle

https://ruby-china.org/topics/18524 试试看

即使安装了 node.js,用 bundle install 安装的时候依然会装这个 gem 的吧

#1 楼 @billy #3 楼 @ywjno 我这是在一个 Rails 项目里装的 bundle install,所以我不知道为什么要装 node.js 啊,因为我之前的项目都没有这样用……

@chairy11 @ywjno 不记得具体的了,应该是要把 therubyracer 去掉。

#5 楼 @billy 这个不是用来把 ruby 和 js 连接起来的吗?可以去掉吗?

@chairy11 负责 js 处理的是 Excjs, 这个 therubyracer 只是一个 v8 包裹。有 node.js 就可以,也需要把它去掉。

发一下 gem list --local | grep psych 的结果

你试试

  1. 删除 therubyracer 这个 gem
  2. 删除 libv8 这个 gem
  3. 删除系统安装的 v8 软件包

然后

  1. 安装 v8 这个软件包
  2. 安装 libv8 这个 gem
  3. 安装 therubyracer 这个 gem

#2 楼 @kungs 好了,谢谢:)

#8 楼 @IchiNiNiIchi psych (2.0.6, 2.0.5)

这个是做什么的?

谢谢了:)问题解决了

#9 楼 @hz_qiuyuanxin 我倒没有单独安装过 v8,当时是好像重新安装过好几次 libv8 这个 gem,每次都提示成功。 不过,貌似现在问题解决了,显示 Your bundle is complete! 了。谢谢你的思路,很清晰。下次有机会再试试:)

#13 楼 @lgn21st 赞美!很系统很详细的思路!非常感谢:)

#13 楼 @lgn21st 那最终意思是不是说,我应该放弃 gemfile 里的"gem 'therubyracer', platforms: :ruby"? 因为我是 ubuntu 和 mac 和 centos 服务器同时在用(家一台电脑公司一台电脑及一台服务器),我就在三台电脑本机上都装上 node.js 就行了? 不用在 gemfile 中加上关于 node.js 相关的任务 gem?

#15 楼 @chairy11 是的,是的,以及是的。

#16 楼 @lgn21st 明白了,谢谢:)

gem install libv8 -v '3.16.14.7' -- --with-system-v8

#13 楼 @lgn21st 翻到了这个问题。果然是按照你的方法完美解决。。谢谢。

lgn21st in gem therubyracer 和 libv8 的安装问题 mention this topic. 14 Jun 17:13
bundle config build.libv8 --with-system-v8
You need to Sign in before reply, if you don't have an account, please Sign up first.