bundle install / update:libv8(therubyracer)安装失败(带有本机扩展)

时间:2011-11-14 18:42:44

标签: ruby-on-rails gem

我最近想更新我的gem包,但遇到了libv8的安装问题(对therubyracer的要求):

Installing libv8 (3.3.10.3) with native extensions /usr/local/rvm/rubies/ruby-1.9.3-head/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:552:in `rescue in block in build_extensions': ERROR: Failed
 to build gem native extension. (Gem::Installer::ExtensionBuildError)

        /usr/local/rvm/rubies/ruby-1.9.3-head/bin/ruby extconf.rb 
Checking for Python...*** 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.

我找到了issue report on therubyracer github site,它建议卸载并重新安装libv8,但这不适用于我的Ubuntu 11.04计算机。任何想法 - 或者我暂时坚持使用旧版本?

7 个答案:

答案 0 :(得分:29)

尝试一下这个:

gem 'therubyracer'
gem 'libv8', '3.16.14.3'

应该有所帮助。

使用新的捆绑器也是更好的:gem install bundler --pre

答案 1 :(得分:29)

我在旧的Ubuntu 10.04(x64)

上遇到了类似的问题

更新项目后,Gemfile拥有了那些宝石

  gem 'libv8', '~> 3.11.8'
  gem "therubyracer", '>= 0.11.0beta1', :require => 'v8'

但是当我运行'bundle install'时出现错误

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

        /home/sseletskyy/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb 
checking for main() in -lpthread... yes
creating Makefile

make
compiling array.cc
compiling script.cc
compiling object.cc
compiling constants.cc
compiling signature.cc
compiling value.cc
compiling locker.cc
compiling init.cc
compiling heap.cc
compiling date.cc
compiling message.cc
compiling accessor.cc
compiling context.cc
compiling exception.cc
compiling backref.cc
compiling trycatch.cc
compiling gc.cc
compiling handles.cc
compiling stack.cc
compiling template.cc
compiling function.cc
compiling primitive.cc
compiling rr.cc
compiling v8.cc
compiling invocation.cc
compiling string.cc
compiling external.cc
compiling constraints.cc
linking shared-object v8/init.so
/home/sseletskyy/.rvm/gems/ruby-1.9.3-p194/gems/libv8-3.11.8.2-x86_64-linux/vendor/v8/out/x64.release/obj.target/tools/gyp/libv8_base.a: could not read symbols: No such file or directory
collect2: ld returned 1 exit status
make: *** [init.so] Error 1


Gem files will remain installed in /home/sseletskyy/.rvm/gems/ruby-1.9.3-p194/gems/therubyracer-0.11.0beta1 for inspection.
Results logged to /home/sseletskyy/.rvm/gems/ruby-1.9.3-p194/gems/therubyracer-0.11.0beta1/ext/v8/gem_make.out
An error occured while installing therubyracer (0.11.0beta1), and Bundler cannot continue.
Make sure that `gem install therubyracer -v '0.11.0beta1'` succeeds before bundling.

这是一个有助于我快速解决该障碍的步骤列表

  1. 卸载所有版本的宝石'libv8'和'therubyracer'

      

    >宝石卸载therubyracer

         

    > gem uninstall libv8

  2. 手动安装therubyracer

      

    >宝石安装therubyracer

         

    获取:libv8-3.3.10.4-x86_64-linux.gem(100%)   取出:therubyracer-0.10.1.gem(100%)   构建原生扩展。这可能需要一段时间......   已成功安装libv8-3.3.10.4-x86_64-linux   成功安装了therubyracer-0.10.1   已安装2颗宝石   安装libv8-3.3.10.4-x86_64-linux的ri文档...   安装therubyracer-0.10.1的ri文档......   安装libv8-3.3.10.4-x86_64-linux的RDoc文档...   安装therubyracer-0.10.1 ...

    的RDoc文档
  3. 检查已安装宝石的版本

      

    >宝石清单| grep libv

         

    libv8(3.3.10.4 x86_64-linux)

         

    >宝石清单| grep therubyracer

         

    therubyracer(0.10.1)

  4. 在Gemfile中设置这些版本并运行

      

    >捆绑安装

  5. 概要。我明白,在我的情况下,我没有使用最新的版本,它可能是兼容性的坏。但至少我可以继续发展。

答案 2 :(得分:7)

Ubuntu 11.04

gem "therubyracer", '0.11.1'
gem 'libv8'
  1. 卸载therubyracer和libv8 gem

  2. 更新bundler gem版本

  3. 安装lib8-dev软件包

    sudo apt-get install libv8-dev

  4. 然后运行

    sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison颠覆imagemagick graphicsmagick libmagickcore-dev libmagickwand-dev

  5. 现在手动安装therubyracer

    gem install therubyracer

  6. 它将为您安装therubyracer和libv8。

  7. 现在运行bundle install

  8. 以上所有步骤解决了我的问题:)

答案 3 :(得分:1)

我最近遇到了同样的问题。以下是RoR.org“Rails入门”指南中的一些有用信息:

  

将CoffeeScript编译为JavaScript需要一个JavaScript运行时,缺少运行时会给你一个execjs错误。通常,Mac OS X和Windows都安装了JavaScript运行时。 Rails在一个注释行中为新应用添加了therubyracer gem到Gemfile,如果需要,你可以取消注释。 therubyrhino是JRuby用户的推荐运行时,默认情况下添加到JRuby下生成的应用程序中的Gemfile。您可以在ExecJS上调查所有支持的运行时。

根据我在其他地方读到的内容,似乎Windows对“热带分析器”宝石的支持并不存在于“3.3.10.4”版本中(可能在更新的版本中,虽然没有读到这一点)。我已经安装了python 2.7并让它进行编译,但是在环境设置过程中你仍会遇到错误。

所以归结为此。查看therubyracer文档here。 'therubyracer'提供这些功能(:

  • 使用Ruby评估Javascript
  • 将您的Ruby对象嵌入Javascript世界
  • 操纵JavaScript对象并从Ruby调用JavaScript函数
  • API与The Ruby Rhino兼容(适用于JRuby:http://github.com/cowboyd/therubyrhino

如果您绝对需要这些功能,那么您应切换到* nix并删除Windows以用于开发/生产环境。否则你可以做我做的事情,并选择不安装'therubyracer'或'libv8'(从我的Gemfile中删除)。我并没有严重依赖JavaScript我正在遇到这个问题的网站,所以我只是忽略了这两个宝石而且一切看起来都很顺利(到目前为止)。

希望这有助于其他有需要的人!

答案 4 :(得分:1)

Ubuntu 12.04

gem 'libv8', '3.11.8.3'
gem 'therubyracer', '0.11.0beta5'

指定上述版本解决了我使用therubyracer的问题。

同样如上所述,我使用了最新的捆绑包:

gem install bundler --pre

答案 5 :(得分:0)

请务必在Gemfile

中引用 ruby​​
gem 'therubyracer', :platform => :ruby

然后运行bundle update

答案 6 :(得分:0)

使用这些终端命令在Ubuntu 16.04上为我修复了

sudo apt-get install g++
sudo apt-get install build-essential