安装libv8时出错:错误:无法构建gem本机扩展

Can*_*nna 172 ruby windows ruby-on-rails libv8

我做了一个铁轨项目,

rails new test_bootstrap.
Run Code Online (Sandbox Code Playgroud)

成功了.

搬到了项目目录并添加了宝石

gem "therubyracer"
gem "less-rails" #Sprockets (what Rails 3.1 uses for its asset pipeline) supports LESS
gem "twitter-bootstrap-rails"
Run Code Online (Sandbox Code Playgroud)

并运行

bundle install
Run Code Online (Sandbox Code Playgroud)

之后,我有这个错误.

Installing libv8 (3.16.14.3)
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

c:/RailsInstaller/Ruby1.9.3/bin/ruby.exe extconf.rb
creating Makefile
??? ??? ?? ? ????.                                                          ??? ??? ?? ?
????.                                                          ??? ??? ?? ? ????.

c:/RailsInstaller/Ruby1.9.3/lib/ruby/ge
ms/1.9.1/gems/libv8-3.16.14.3/ext/libv8/builder.rb:58:in `setup_python!': libv8 requires
python 2 to be installed in order to build, but it is currently not available (RuntimeErr
or) from c:/RailsInstaller/Ruby1.9.
3/lib/ruby/gems/1.9.1/gems/libv8-3.16.14.3/ext/libv8/builder.rb:42:in `block in build_lib
v8/builder.rb:42:in `block in build_libv8!'
        from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/libv8-3.16.14.3/ext/lib
v8/builder.rb:40:in `chdir'
        from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/libv8-3.16.14.3/ext/lib
v8/builder.rb:40:in `build_libv8!'
        from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/libv8-3.16.14.3/ext/lib
v8/location.rb:24:in `install!'
        from extconf.rb:7:in `<main>'                                                    


Gem files will remain installed in c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/l
ibv8-3.16.14.3 for inspection.
Results logged to c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/libv8-3.16.14.3/ex
t/libv8/gem_make.out
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.
Run Code Online (Sandbox Code Playgroud)

对一些韩国人抱歉.它说,它无法找到所选择的路径或类似的东西.

我试图运行此命令

gem install libv8 -v '3.16.14.3' 
Run Code Online (Sandbox Code Playgroud)

抛出同样的错误.

Gop*_*ore 579

试试这个:

gem install libv8 -v '3.16.14.3' -- --with-system-v8
Run Code Online (Sandbox Code Playgroud)

注意: 因为libv8是therubyracer使用的V8引擎的接口,所以即使已经安装了V8,也可能需要使用libv8.如果您希望使用自己的V8安装,而不是为您构建,请使用该--with-system-v8选项.

有关更多信息,您可以在github查看libv8的文档

  • 这部分工作但我在安装therubyracer时仍然遇到错误.它给了我一个类似于我之前使用libv8的错误"在捆绑之前确保这样的成功"但当我尝试运行'gem install therubyracer'时,我得到"无法构建gem原生扩展".错误 (9认同)
  • 我用它.编译好,但运行'bundle'时仍然有错误 (4认同)
  • 在 OS X 10.15 上,“bundle config build.libv8 --with-system-v8”有效。 (2认同)

Arp*_*hah 150

如何解决libv8/therubyracer问题

我遇到类似的问题,安装libv8后,安装therubyracer时出错.这是我的解决方案:

$ gem install libv8 -v '3.16.14.3' -- --with-system-v8

$ bundle install
Run Code Online (Sandbox Code Playgroud)

- 看安装therubyracer的错误 -

$ gem uninstall libv8

$ brew install v8

$ gem install therubyracer

$ bundle install
Run Code Online (Sandbox Code Playgroud)

- 看安装libv8的错误 -

$ gem install libv8 -v '3.16.14.3' -- --with-system-v8
Run Code Online (Sandbox Code Playgroud)

  • 这个回复中提到的步骤效果最好,我们需要先安装宝石安装libv8,卸载安装系统范围v8之前安装gemubyracer宝石(宝石安装libv8与--with-system-v8标志):) (4认同)
  • 请记住将"3.16.14.3"更改为尝试运行的任何版本软件包,或者在运行软件包安装时它无法正常工作 (3认同)

cod*_*ted 43

使用自制软件,这有助于我解决此错误.

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
Run Code Online (Sandbox Code Playgroud)

看到rubyracer Github问题.


Ana*_*van 34

我尝试了上面列出的解决方案命令,它看起来非常适合安装单个gem,但是对于bundler用户 - 你应该使用bundle config

使用

bundle config build.libv8 --with-system-v8 
Run Code Online (Sandbox Code Playgroud)

bundle config build.therubyracer --with-system-v8
Run Code Online (Sandbox Code Playgroud)

配置bundler以获取安装特定gem时要使用的参数

  • 无论出于何种原因,我的bundle配置需要以下内容来查找正确的版本(使用下面编码上瘾的答案的brew安装)`bundle config build.therubyracer --with-v8-dir =/usr/local/opt/v8-315 ` (6认同)

Lit*_*mus 7

我觉得你不需要therubyracer在windows上使用gem.它是一个使用V8引擎的javascript运行时.因此它正在尝试安装libv8.

您可以安全地从Gemfile中删除gem.

Rails很乐意使用它可以找到的运行时.execjs,nodejs等等都是可能的选择.

Microsoft已经在Windows上为javascript嵌入了JScript运行时,Rails使用它.有关更多信息,请参阅


Arm*_*ega 5

解决问题的其他解决方法是在Gemfile中将它们分开

group :production do
 gem 'libv8', '~> 3.11.8.3'
 gem 'therubyracer', :platform => :ruby
end
Run Code Online (Sandbox Code Playgroud)

然后运行bundle命令:bundle install --without production