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


183

我做了一个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' 

抛出相同的错误。



我发现了这一点,我必须安装python并设置路径。现在可以了。希望人们用这个线程解决。stackoverflow.com/questions/10812696/…–
Canna

别指望了:)从Debian 缺乏对围绕libv8和Node.js的生态系统的安全支持“ Node.js平台建立在libv8-3.14之上,该平台具有很高的安全性问题,但目前该项目中没有志愿者或安全团队有足够的兴趣,并愿意花费大量时间来阻止那些即将出现的问题……”
jww

Answers:


612

试试这个:

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

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

有关更多信息,请阅读github上libv8文档。


6
我用那个 它可以编译,但是运行“捆绑包”时我仍然有错误
Sucrenoir 2014年

10
这部分工作正常,但是在安装therubyracer时仍然出现错误。它给我一个类似于libv8之前的错误,“确保在绑定之前成功完成”,但是当我尝试运行'gem install therubyracer'时,出现“无法构建gem本机扩展”的错误。错误
sixty4bit

1
我用root给出的参数卸载并重新安装它。不行 我的错误是An error occurred while installing libv8 (3.16.14.3), and Bundler cannot continue.Bundler::GemspecError: Could not read gem at /home/gitlab/gitlab/vendor/bundle/ruby/2.1.0/cache/libv8-3.16.14.3-x86_64-linux.gem. It may be corrupted. 我删除了整个缓存文件夹并重新运行bundle install --full-index --deployment --without development test postgres aws。作品。
Nick Dong

1
完善!gem install libv8 -v '3.16.14.3' -- --with-system-v8在OS X 10.11上为我工作。
Jagdeep Singh

我发现它找不到系统v8,所以这样做brew install v8很有帮助。按照这个答案说明操作:stackoverflow.com/questions/24081473/...
redfox05

154

如何解决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

4
此回复中提到的步骤最有效,我们需要先进行gem install libv8的安装,然后先卸载以安装系统级的v8,然后再进行gem安装therubyracer(带有--with-system-v8标志的gem install libv8):)
Parthan

1
我认为您不需要第一步。在运行捆绑软件安装之前,请使用brew安装系统v8。然后手动安装therubyracer gem和libv8 gem。并运行捆绑安装。但是我还没有尝试过。
gitb 2015年

这在OSX 10.10.5上也对我有用,对于libv8 3.16.14.11是ruby 2.1.2p95
Michael Oakley,

3
请记住将“ 3.16.14.3”更改为尝试运行的任何版本的捆绑包,否则在您运行捆绑包安装时将无法正常工作
Jonathon Blok 2016年

还在libv'3.16.14.11'的ruby 1.9.3中为10.12(Sierra)工作

47

使用自制软件可以帮助我解决此错误。

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问题上可见。


尽管它通过brew安装了旧版本的v8,但对我来说确实有用。
桑杰

1
每次切换红宝石版本时,此错误使我发疯。我认为您可以尝试调整v8版本选项和获取它的路径。
编码上瘾的

仅此解决方案对我
有用

@codingaddicted你曾经想过这个错误不断发生吗?我为一个新项目更新了ruby和rails,当我为旧项目打开一个新的shell时总是出现此错误。rvm应该可以处理这些版本问题,但是每次为旧项目打开新的shell时,我都需要继续执行上述命令。
iamse7en

据我记得,@ iamse7en必须为每个版本的ruby运行那些。当我更新ruby时,我看到了这个错误(但是上个月我没有做太多的ruby,并且我没有使用不同的版本)。
编码沉迷

43

我尝试了上面列出的命令的解决方案,该命令对于安装单个gem来说看起来很好,但是对于捆绑用户来说-您应该使用bundle config

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

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

配置捆绑程序以获取安装特定gem时要使用的参数


6
无论出于何种原因,我的捆绑软件配置都需要以下内容才能找到正确的版本(它使用下面的编码瘾君子的答案中的brew install) bundle config build.therubyracer --with-v8-dir=/usr/local/opt/v8-315
iturgeon

7

我认为您不需要therubyracerWindows上的宝石。这是使用V8引擎的javascript运行时。因此,它正在尝试安装libv8

您可以安全地从Gemfile中删除该宝石。

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

Microsoft已经在Windows上嵌入了javascript的JScript运行时,Rails使用了它。看到更多


6

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

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

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


这与@Litmus的答案结合使用效果很好,因为它显示了如何在不破坏Windows上的开发设置的情况下将gem保留在配置中(这可能与部署相关)。
glenatron 2014年


3

github上发现了这个

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

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

2

这对我行得通。把它放在你的Gemfile中

宝石'libv8','〜> 3.16.14.7'


该解决方案使我进入bundle install --no-deploymentbundle install为我工作
simo

2

我的问题尚未有相关therubyracer的一切只是libv8宝石和指出@ rishav-巴德瓦杰--with-system-v8没有做的伎俩,而不是我不得不EXEC

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.



0

试试看

宝石“ therubyracer”,“〜> 0.10.2”到Gemfile

并且它将安装依赖的gem libv8(3.3.10.4),并且解决了build gem本机扩展失败的问题。



0

我觉得这与libv8无关,而与therubyracer无关。

我在Rails应用程序上运行捆绑安装时收到了相同的错误。如果您也遇到了类似的情况,请尝试像这样在bundle之外安装gem:

gem install therubyracer

然后运行捆绑安装。我希望这也对您有用。


0

使用libv8和时,我也遇到问题mini_racer。解决了问题

brew install v8

bundle update libv8 mini_racer

使用最新版本mini_racer 0.2.10libv8 7.3.492.27并像一个魅力。


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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.