Erreur lors de l'installation de libv8: ERREUR: échec de la création de l'extension native gem

183

J'ai fait un projet de rails avec,

rails new test_bootstrap.

réussi.

déplacé dans le répertoire du projet et ajouté les gemmes

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

et courir

bundle install

après cela, j'ai cette erreur.

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.

désolé pour certains Coréens. Il dit, il ne peut pas trouver le chemin choisi ou quelque chose comme ça.

et j'ai essayé d'exécuter cette commande

gem install libv8 -v '3.16.14.3' 

jetant la même erreur.

Canna
la source
Avez-vous installé Devkit github.com/oneclick/rubyinstaller/wiki/Development-Kit
Amit Thawait
J'ai trouvé cela, je dois installer python et définir le chemin. et maintenant ça marche. espérons que les gens résolvent avec ce fil. stackoverflow.com/questions/10812696/…
Canna
Ne regardez pas un cheval de cadeau dans la bouche :) De Debian Le manque de support de sécurité pour l'écosystème autour de libv8 et Node.js : "La plate-forme Node.js est construite sur la libv8-3.14, qui connaît un volume élevé de sécurité problèmes, mais il n'y a actuellement aucun volontaire au sein du projet ou l'équipe de sécurité suffisamment intéressé et disposé à passer le temps nécessaire pour endiguer ces problèmes entrants ... "
jww

Réponses:

616

essaye celui-là:

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

Remarque: comme libv8 est l'interface du moteur V8 utilisé par therubyracer, vous devrez peut-être utiliser libv8, même si vous avez déjà installé V8. Si vous souhaitez utiliser votre propre installation V8, plutôt que de la faire construire pour vous, utilisez l' --with-system-v8option.

Pour en savoir plus, vous pouvez consulter la documentation de libv8 sur github

Gopal S Rathore
la source
6
J'utilise ça. Il compile bien, mais j'ai toujours des erreurs lors de l'exécution de 'bundle'
Sucrenoir
10
Cette partie a fonctionné mais j'obtiens toujours une erreur lors de l'installation de therubyracer. Cela me donne une erreur similaire à ce que j'obtenais auparavant avec libv8 "assurez-vous que tel ou tel réussit avant le regroupement" mais quand j'essaye de lancer "gem install therubyracer" j'obtiens "Failed to build gem native extension." erreur
sixty4bit
1
Je le désinstalle et le réinstalle avec l'argument donné ci-dessus à la racine. Ne fonctionne pas. Mon erreur est An error occurred while installing libv8 (3.16.14.3), and Bundler cannot continue.et 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. je supprime tout le dossier de cache et je le relance bundle install --full-index --deployment --without development test postgres aws. Travaux.
Nick Dong
1
Parfait! gem install libv8 -v '3.16.14.3' -- --with-system-v8a travaillé pour moi sur OS X 10.11.
Jagdeep Singh
J'ai trouvé qu'il ne pouvait pas trouver un système v8, ce qui a brew install v8aidé. Suivez les instructions à cette réponse ici: stackoverflow.com/questions/24081473/…
redfox05
156

Comment résoudre le problème de libv8 / therubyracer

J'ai rencontré un problème similaire dans lequel après l'installation de libv8, une erreur se produit lors de l'installation de therubyracer. Voici ma solution:

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

- voir erreur d'installation du therubyracer -

$ gem uninstall libv8

$ brew install v8

$ gem install therubyracer

$ bundle install

- voir erreur lors de l'installation de libv8 -

$ gem install libv8 -v '3.16.14.3' -- --with-system-v8
Arpit Shah
la source
4
les étapes mentionnées dans cette réponse fonctionnent le mieux, nous devons d'abord installer la gemme libv8, désinstaller pour installer la v8 à l'échelle du système avant d'installer la gemme therubyracer (gem installer libv8 avec le drapeau --with-system-v8) :)
Parthan
1
Je ne pense pas que vous ayez besoin du premier pas. Avant d'exécuter l'installation du bundle, utilisez brew pour installer le système v8. Ensuite, installez manuellement le gem therubyracer et le gem libv8. et exécutez l'installation groupée. Mais je ne l'ai pas encore essayé.
gitb
Cela a également fonctionné pour moi sur OSX 10.10.5 avec ruby ​​2.1.2p95 pour libv8 3.16.14.11
Michael Oakley
3
N'oubliez pas de remplacer '3.16.14.3' par la version du bundle qui essaie de s'exécuter ou cela ne fonctionnera pas lorsque vous exécutez l'installation du bundle
Jonathon Blok
A également travaillé pour 10.12 (Sierra) avec ruby ​​1.9.3 pour la libv '3.16.14.11'
sojourner
49

Avec homebrew, cela m'aide à résoudre cette erreur.

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

Vu sur les problèmes de rubyracer Github.

codage accro
la source
Cela a fonctionné pour moi, bien qu'il installe une ancienne version de v8 via brew.
Sanjay
1
Cette erreur me rend fou à chaque fois que je change de version ruby. Je pense que vous pouvez essayer d'ajuster l'option de la version v8 et le chemin pour l'obtenir.
coding addicted
seule cette solution fonctionne pour moi, merci pour la solution
AMIC MING
@codingaddicted avez-vous déjà pensé que cette erreur continuait de se produire? J'ai mis à jour ruby ​​and rails pour un nouveau projet et j'obtiens toujours cette erreur lorsque j'ouvre un nouveau shell pour mon ancien projet. rvm est censé gérer ces problèmes de version, mais je dois continuer à faire vos commandes ci-dessus chaque fois que j'ouvre un nouveau shell pour mon ancien projet.
iamse7en
@ iamse7en autant que je me souvienne, je dois les exécuter pour chaque version de ruby. Je voyais cette erreur lorsque j'ai mis à jour ruby ​​(mais je n'ai pas fait autant de ruby ​​les mois derniers et je n'ai pas joué avec différentes versions).
coding addicted
45

J'ai essayé la commande de solution listée ci-dessus qui semble très bien pour installer un bijou individuel, mais pour les utilisateurs de bundler - vous devez utiliser la configuration de bundle

Utilisation

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

et

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

pour configurer le bundler pour prendre les paramètres à utiliser lors de l'installation d'un gem spécifique

Anand Chavan
la source
6
Pour une raison quelconque, ma configuration de bundle nécessitait ce qui suit pour trouver la bonne version (qui utilise l'installation de brassage de la réponse de coding addicted ci-dessous) bundle config build.therubyracer --with-v8-dir=/usr/local/opt/v8-315
iturgeon
7

Je ne pense pas que vous ayez besoin de therubyracergemmes sur Windows. C'est un runtime javascript utilisant le moteur V8. Par conséquent, il tente d'installer libv8.

Vous pouvez supprimer en toute sécurité la gemme de votre Gemfile.

Rails est heureux d'utiliser n'importe quel runtime qu'il peut trouver. execjs, nodejsetc. sont toutes des options possibles.

Microsoft intègre déjà le runtime JScript pour JavaScript sur Windows, et Rails l'utilise. Voir ceci pour plus

Tournesol
la source
6

Une autre solution de contournement pour résoudre le problème consiste à les séparer dans le Gemfile

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

Et puis exécutez la commande bundle : bundle install - sans production

Arman Ortega
la source
Cela fonctionne bien en combinaison avec la réponse de @Litmus car cela montre comment vous pouvez conserver la gemme dans la configuration (qui sera probablement pertinente pour le déploiement) sans interrompre la configuration de développement sous Windows.
glenatron
3

Je n'ai pas non plus pu installer ce joyau au lieu d'utiliser

--with-system-v8

une fois, essayez de faire la mise à jour de l'ensemble qui a bien fonctionné pour moi

Rishav Bhardwaj
la source
3

trouvé ceci sur github

en supposant que vous ayez essayé les étapes mentionnées ci-dessus, installé v8-315 et v8 via brew.

brew unlink v8
brew link --force v8-315
gem install therubyracer -v '0.12.2' -- --with-system-v8
Sojan V José
la source
2

Ça marche pour moi. Mettez ça dans votre Gemfile

gem 'libv8', '~> 3.16.14.7'

Hrk
la source
cette solution m'a conduit bundle install --no-deploymentet a ensuite bundle installfonctionné pour moi
simo
2

Mon problème n'était pas du tout lié therubyracerà un libv8bijou et comme @ rishav-bhardwaj l'a souligné --with-system-v8n'a pas fait l'affaire, à la place j'ai dû exécuter

bundle update

puis

bundle install

et enfin

Bundle complete!

L'erreur est partie!

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.

d1jhoni1b
la source
1

Dans mon cas, j'ai résolu cette situation en exigeant 'mini_racer', '~> 0.2.6' dans mon Gemfile

Ensuite, la commande d'installation du bundle a fonctionné.

Tomas Radic
la source
0

Essayez avec

gem "therubyracer", "~> 0.10.2" vers Gemfile

Et il installera la gem libv8 dépendante (3.3.10.4) et le problème de l'échec de l'extension native de build gem sera résolu.

rahul patil
la source
0

Résolution du 3.16.14.7problème de libv8 à l' aide de la commande ci-dessous:

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

Et puis bundle installterminé avec succès.

Faisal Raza
la source
0

Je pense que cela a moins à voir avec libv8 et plus à voir avec therubyracer.

J'ai reçu la même erreur lors de l'exécution d'une installation groupée sur une application de rails. si vous avez rencontré cela de la même manière, essayez d'installer le gem en dehors du bundle comme ceci:

gem install therubyracer

puis exécutez l'installation du bundle. j'espère que cela fonctionne pour vous aussi.

Sean M
la source
0

J'ai également eu des problèmes avec libv8et mini_racer. Résolution du problème avec

brew install v8

bundle update libv8 mini_racer

En utilisant les dernières versions mini_racer 0.2.10et a libv8 7.3.492.27fonctionné comme un charme.

anka
la source
0

J'ai essayé les commandes ci-dessous sur mon local, cela a bien fonctionné:

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
Rintu George
la source