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

时间:2013-10-30 04:15:52

标签: ruby-on-rails ruby windows libv8

我用,

创建了一个rails项目
rails new test_bootstrap.

成功。

移动到项目目录并添加了宝石

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

并运行

bundle install

之后,我有这个错误。

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.
对某些韩国人抱歉。它说,它无法找到所选择的路径或类似的东西。

我尝试运行此命令

gem install libv8 -v '3.16.14.3' 

抛出相同的错误。

18 个答案:

答案 0 :(得分:560)

试试这个:

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

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

有关更多信息,请查看libv8 on github

的文档

答案 1 :(得分:144)

如何解决libv8 / therubyracer问题

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

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

$ bundle install

- 请参阅安装therubyracer的错误 -

$ gem uninstall libv8

$ brew install v8

$ gem install therubyracer

$ bundle install

- 请参阅安装libv8的错误 -

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

答案 2 :(得分:41)

使用自制程序,这有助于我解决此错误。

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问题。

答案 3 :(得分:29)

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

使用

bundle config build.libv8 --with-system-v8 

bundle config build.therubyracer --with-system-v8

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

答案 4 :(得分:7)

我认为你在Windows上不需要therubyracer gem。它是一个使用V8引擎的javascript运行时。因此,它正在尝试安装libv8

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

Rails很乐意使用它可以找到的运行时。 execjsnodejs等都是可能的选择。

Microsoft已经在Windows上为javascript嵌入了JScript运行时,Rails使用它。 See this for more

答案 5 :(得分:5)

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

group :production do
 gem 'libv8', '~> 3.11.8.3'
 gem 'therubyracer', :platform => :ruby
end

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

答案 6 :(得分:2)

我的问题与therubyracer仅与libv8宝石有关,而且@ rishav-bhardwaj指出--with-system-v8并没有做到这一点,而是我有执行

bundle update

然后

bundle install

最后

Bundle complete!

错误消失了!

Gem::Ext::BuildError: ERROR: Failed to build gem native extension. 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.

答案 7 :(得分:2)

我也无法安装此gem而不是使用

--with-system-v8

一旦尝试捆绑更新,这对我来说很好

答案 8 :(得分:2)

这对我有用。把它放在Gemfile中

  

gem&#39; libv8&#39;,&#39;〜&gt; 3.16.14.7&#39;

答案 9 :(得分:1)

github上找到了这个

假设您已尝试上述步骤,并通过brew安装了v8-315和v8。

brew unlink v8
brew link --force v8-315
gem install therubyracer -v '0.12.2' -- --with-system-v8

答案 10 :(得分:1)

我解决使用这样的问题:

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

答案 11 :(得分:0)

尝试

gem“therubyracer”,“〜> 0.10.2”到Gemfile

它将安装依赖的gem libv8(3.3.10.4)并且build gem native extension failure的问题得到解决。

答案 12 :(得分:0)

使用以下命令解决了libv8 3.16.14.7问题:

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

然后bundle install成功完成。

答案 13 :(得分:0)

我觉得这与libv8关系不大,而与therubyracer有关。

我在rails应用上运行捆绑安装时收到了同样的错误。如果你遇到过类似的问题,请尝试在bundle之外安装gem:

gem install therubyracer

然后运行bundle install。我希望这也适合你。

答案 14 :(得分:0)

就我而言,我通过要求解决了这种情况 'mini_racer', '~> 0.2.6' 在我的Gemfile中

然后捆绑安装命令起作用了。

答案 15 :(得分:0)

我在使用libv8mini_racer时也遇到了问题。解决了

的问题
brew install v8

bundle update libv8 mini_racer

使用最新版本mini_racer 0.2.10libv8 7.3.492.27就像是一种魅力。

答案 16 :(得分:0)

我在本地尝试了以下命令,效果很好:

brew install v8@3.15
gem install libv8 -v 'YOUR_VERSION' -- --with-system-v8
gem install therubyracer -v 'YOUR_VERSION' -- --with-v8-dir=/usr/local/opt/v8@3.15
bundle install

答案 17 :(得分:0)

我们在2020年12月在Debian 10 VM以及本地Debian 10桌面上突然遇到了编译错误。

捆绑尝试编译失败 Installing libv8 3.16.14.19 with native extensions

错误日志显示:

IOError: [Errno 2] No such file or directory: '/home/username/application/shared/bundle/ruby/2.6.0/gems/libv8-7.3.492.27.1/vendor/build/config/gclient_args.gni'
Running: gclient root
Running: gclient config --spec 'solutions = [
  {
    "url": "https://chromium.googlesource.com/v8/v8.git",
    "managed": False,
    "name": "v8",
    "deps_file": "DEPS",
    "custom_deps": {},
  },
]
'
Running: gclient sync --with_branch_heads
Subprocess failed with return code 1.

我们检查了Google v8 Repo上的标签,发现请求的标签7.3.492.27.1似乎在Google Repo上不可用:

libv8 did not install properly, expected binary v8 archive '/home/.../gyp
/libv8_snapshot.a'to exist, but it was not found 
(Libv8::Location::Vendor::ArchiveNotFound)

我们唯一的解决方案是从Gemfile中完全删除therubyracer:-(