在安装therubyracer以及Ruby 2.0.0.p0和Rails 4.0时,我收到以下错误
ERROR: While executing gem ... (NoMethodError)
undefined method `size' for nil:NilClass
如果我在使用bundle install时安装了相同的gem,那么我会得到依赖gem的错误,请参阅下面的日志。
NoMethodError: undefined method `size' for nil:NilClass
An error occurred while installing libv8 (3.16.14.3), and Bundler cannot continue.
Make sure that `gem install libv8 -v '3.16.14.3'` succeeds before bundling.
请找到我试图安装的GIT的链接 https://github.com/niquola/angularjs-on-rails
答案 0 :(得分:3)
我今天遇到了同样的问题。并解决了它。我正在使用Lubuntu 13.04,RVM和Ruby 1.9.3。
可能是您的平台不在由rubyracer使用的libv8支持列表中,并且gem应该由您自己编译。
直接来自:https://github.com/cowboyd/libv8
从git获取libv8源代码,编译它并从以下代码构建gem:
git clone git://github.com/cowboyd/libv8.git
cd libv8
bundle install
bundle exec rake checkout
bundle exec rake compile
bundle exec rake build
安装gem:
gem install ./pkg/libv8-3.16.14.3.gem
我的项目文件夹上执行“bundle update”时仍然出错,因为gem似乎没有被复制到我的bundle gem缓存中。
Bundler::GemspecError: Could not read gem at /home/devmachine/.rvm/gems/ruby-1.9.3-p448/cache/libv8-3.16.14.3.gem. It may be corrupted.
An error occurred while installing libv8 (3.16.14.3), and Bundler cannot continue.
Make sure that `gem install libv8 -v '3.16.14.3'` succeeds before bundling.
所以我在再次运行“捆绑更新”之前将其复制到此文件夹中:
cp /home/devmachine/Downloads/libv8/pkg/libv8-3.16.14.3.gem /home/devmachine/.rvm/gems/ruby-1.9.3-p448/cache
请记住,在执行编译之前,您应该安装以下软件包:
我希望它有所帮助。
您不必使用原生扩展构建自己的gem。您只需要在系统中安装v8库。之后,您可以配置bundler以使用本机v8。为此,您应该在系统上安装V8引擎。
# Get Google v8 engine from git
git clone git://github.com/v8/v8.git v8 && cd v8
# Install GYP
make dependencies
# I had problems with warnings and strict aliasing. So I ignored and switched them off.
make native werror=no strictaliasing=off
现在你应该能够使用系统中的v8:
bundle config build.libv8 --with-system-v8
在此命令之后,您可以继续使用通常的“捆绑安装”..
忘记v8并改为使用Node.js:
wget http://nodejs.org/dist/node-latest.tar.gz
tar zxvf node-latest.tar.gz
# cd into extracted directory (e.g. cd node-v0.10.14)
make
make install
从项目Gemfile中删除“therubyracer”依赖项。