Fehler bei der Installation von libv8: FEHLER: Fehler beim Erstellen der nativen Gem-Erweiterung

183

Ich habe ein Rails-Projekt gemacht mit,

rails new test_bootstrap.

erfolgreich.

zog in das Projektverzeichnis und fügte die Edelsteine ​​hinzu

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

und Renn

bundle install

Danach habe ich diesen Fehler.

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.

Entschuldigung für einige Koreaner. Es heißt: Es kann den gewählten Weg oder ähnliches nicht finden.

und ich habe versucht, diesen Befehl auszuführen

gem install libv8 -v '3.16.14.3' 

den gleichen Fehler werfen.

Canna
quelle
Ich habe dies gefunden, ich muss Python installieren und den Pfad festlegen. und jetzt funktioniert es. hoffe die Leute lösen mit diesem Thread. stackoverflow.com/questions/10812696/…
Canna
Schauen Sie keinem Geschenkpferd in den Mund :) Aus Debians mangelnder Sicherheitsunterstützung für das Ökosystem um libv8 und Node.js : "Die Node.js-Plattform basiert auf libv8-3.14, das ein hohes Maß an Sicherheit bietet Probleme, aber es gibt derzeit keine Freiwilligen innerhalb des Projekts oder des Sicherheitsteams, die ausreichend interessiert und bereit sind, die große Zeit zu verbringen, die erforderlich ist, um diese eingehenden Probleme
einzudämmen

Antworten:

612

Probier diese:

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

Hinweis: Da libv8 die Schnittstelle für die von therubyracer verwendete V8-Engine ist, müssen Sie möglicherweise libv8 verwenden, auch wenn Sie V8 bereits installiert haben. Wenn Sie Ihre eigene V8-Installation verwenden möchten, anstatt sie für Sie erstellen zu lassen, verwenden Sie die --with-system-v8Option.

Weitere Informationen finden Sie in der Dokumentation zu libv8 auf github

Gopal S Rathore
quelle
6
Ich benutze das. Es kompiliert in Ordnung, aber ich habe immer noch Fehler beim Ausführen von 'Bundle'
Sucrenoir
10
Dieser Teil hat funktioniert, aber ich erhalte immer noch einen Fehler bei der Installation von Therubyracer. Es gibt mir einen ähnlichen Fehler wie zuvor mit libv8 "Stellen Sie sicher, dass dies und das erfolgreich ist, bevor Sie es bündeln", aber wenn ich versuche, "gem install therubyracer" auszuführen, wird "Fehler beim Erstellen der nativen Gem-Erweiterung" angezeigt. Fehler
sechzig4bit
1
Ich deinstalliere es und installiere es mit dem oben angegebenen Argument neu. Funktioniert nicht. Mein Fehler ist An error occurred while installing libv8 (3.16.14.3), and Bundler cannot continue.und 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. ich entferne den gesamten Cache-Ordner und führe ihn erneut aus bundle install --full-index --deployment --without development test postgres aws. Funktioniert.
Nick Dong
1
Perfekt! gem install libv8 -v '3.16.14.3' -- --with-system-v8arbeitete für mich unter OS X 10.11.
Jagdeep Singh
Ich fand, dass es kein System v8 finden konnte, also brew install v8half es. Folgen Sie den Anweisungen bei dieser Antwort hier: stackoverflow.com/questions/24081473/…
redfox05
154

So beheben Sie das Problem mit libv8 / therubyracer

Ich habe ein ähnliches Problem festgestellt, bei dem nach der Installation von libv8 ein Fehler bei der Installation von therubyracer auftritt. Hier ist meine Lösung:

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

- siehe Fehler beim Installieren des Thermosammlers -

$ gem uninstall libv8

$ brew install v8

$ gem install therubyracer

$ bundle install

- siehe Fehler bei der Installation von libv8 -

$ gem install libv8 -v '3.16.14.3' -- --with-system-v8
Arpit Shah
quelle
4
Die in dieser Antwort genannten Schritte funktionieren am besten. Wir müssen zuerst lib lib8 installieren, deinstallieren, um das systemweite v8 zu installieren, bevor gem therubyracer installiert (gem libv8 mit dem Flag --with-system-v8 installieren) :)
Parthan
1
Ich glaube nicht, dass Sie den ersten Schritt brauchen. Verwenden Sie Brew, um das System v8 zu installieren, bevor Sie die Bundle-Installation ausführen. Installieren Sie dann sowohl den Therubyracer-Edelstein als auch den libv8-Edelstein von Hand. und führen Sie die Bundle-Installation aus. Aber ich habe es noch nicht versucht.
Gitb
Dies funktionierte auch für mich unter OSX 10.10.5 mit Ruby 2.1.2p95 für libv8 3.16.14.11
Michael Oakley
3
Denken Sie daran, '3.16.14.3' auf die Version zu ändern, die das Bundle ausführen möchte, oder es funktioniert nicht, wenn Sie die Bundle-Installation ausführen
Jonathon Blok
Arbeitete auch für 10.12 (Sierra) mit Ruby 1.9.3 für libv '3.16.14.11'
Sojourner
47

Mit Homebrew hilft mir dies, diesen Fehler zu beheben.

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

Gesehen auf Rubyracer Github Fragen.

Codierung süchtig
quelle
Dies hat bei mir funktioniert, obwohl eine ältere Version von v8 über Brew installiert wird.
Sanjay
1
Dieser Fehler macht mich jedes Mal verrückt, wenn ich die Ruby-Version wechsle. Ich denke, Sie können versuchen, die v8-Versionsoption und den Pfad anzupassen, um sie zu erhalten.
Codierung süchtig
Nur diese Lösung funktioniert für mich, danke für die Lösung
AMIC MING
@codingaddicted Hast du jemals gedacht, dass dieser Fehler weiterhin auftritt? Ich habe Ruby und Rails für ein neues Projekt aktualisiert und erhalte immer diesen Fehler, wenn ich eine neue Shell für mein altes Projekt öffne. rvm soll diese Versionsprobleme lösen, aber ich muss Ihre Befehle jedes Mal ausführen, wenn ich eine neue Shell für mein altes Projekt öffne.
iamse7en
@ iamse7en Soweit ich mich erinnere, muss ich diese für jede Version von Ruby ausführen. Ich habe diesen Fehler gesehen, als ich Ruby aktualisiert habe (aber ich habe in den letzten Monaten nicht so viel Ruby gemacht und nicht mit verschiedenen Versionen gespielt).
Codierung süchtig
43

Ich habe die oben aufgeführte Lösung ausprobiert, die für die Installation einzelner Gem sehr gut aussieht, aber für Bundler-Benutzer - Sie sollten die Bundle-Konfiguration verwenden

Verwenden

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

und

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

um den Bundler so zu konfigurieren, dass er die Parameter verwendet, die bei der Installation eines bestimmten Gems verwendet werden sollen

Anand Chavan
quelle
6
Aus irgendeinem Grund erforderte meine Bundle-Konfiguration Folgendes, um den richtigen Build zu finden (der die Brew-Installation aus der Antwort von Coding Addicted unten verwendet) bundle config build.therubyracer --with-v8-dir=/usr/local/opt/v8-315
iturgeon
7

Ich glaube nicht, dass Sie therubyracerEdelsteine ​​an Fenstern brauchen . Es ist eine Javascript-Laufzeit mit V8-Engine. Daher wird versucht, es zu installieren libv8.

Sie können den Edelstein sicher aus Ihrer Gemfile entfernen.

Rails verwendet gerne die Laufzeit, die es finden kann. execjs, nodejsUsw. sind alle möglichen Optionen.

Microsoft bettet JScript Runtime für Javascript bereits unter Windows ein und Rails verwendet es. Weitere Informationen finden Sie hier

Lackmus
quelle
6

Eine andere Problemumgehung zur Behebung des Problems besteht darin, sie in der Gem-Datei zu trennen

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

Führen Sie dann den Befehl bundle aus : bundle install --ohne Produktion

Arman Ortega
quelle
Dies funktioniert gut in Kombination mit der Antwort von @Litmus, da dies zeigt, wie Sie das Juwel in der Konfiguration (die wahrscheinlich für die Bereitstellung relevant sein wird) beibehalten können, ohne das Entwicklungssetup unter Windows zu beschädigen.
Glenatron
3

Ich konnte dieses Juwel auch nicht installieren, anstatt es zu verwenden

--with-system-v8

Versuchen Sie einmal, ein Bundle-Update durchzuführen, das für mich gut funktioniert hat

Rishav Bhardwaj
quelle
3

fand dies auf Github

Angenommen, Sie haben die oben genannten Schritte ausgeführt und v8-315 und v8 über Brew installiert.

brew unlink v8
brew link --force v8-315
gem install therubyracer -v '0.12.2' -- --with-system-v8
Sojan V Jose
quelle
2

Das ist für mich in Ordnung. Legen Sie das in Ihre Gemfile

gem 'libv8', '~> 3.16.14.7'

Hrk
quelle
Diese Lösung führte mich zu bundle install --no-deploymentund bundle installarbeitete dann für mich
Simo
2

Mein Problem mit nicht verwandten therubyraceran allen nur libv8Juwel und als @ Rishav-Bhardwaj hingewiesen --with-system-v8hat den Trick nicht, stattdessen musste ich exec

bundle update

dann

bundle install

und schlussendlich

Bundle complete!

Der Fehler ist weg!

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
quelle
1

In meinem Fall habe ich diese Situation gelöst, indem ich sie 'mini_racer', '~> 0.2.6' in meiner Gemfile angefordert habe

Dann funktionierte der Bundle-Installationsbefehl.

Tomas Radic
quelle
0

Versuche es mit

Edelstein "Therubyracer", "~> 0,10,2" zu Gemfile

Außerdem wird das abhängige Gem libv8 (3.3.10.4) installiert, und das Problem mit dem Fehler der nativen Erweiterung von Build Gem wurde behoben.

rahul patil
quelle
0

Das libv8- 3.16.14.7Problem wurde mit dem folgenden Befehl behoben :

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

Und dann bundle installerfolgreich abgeschlossen.

Faisal Raza
quelle
0

Ich denke, das hat weniger mit libv8 als vielmehr mit therubyracer zu tun.

Ich habe den gleichen Fehler erhalten, als ich eine Bundle-Installation auf einer Rails-App ausgeführt habe. Wenn Sie dies in ähnlicher Weise festgestellt haben, versuchen Sie, den Edelstein außerhalb des Bundles wie folgt zu installieren:

gem install therubyracer

Führen Sie dann die Bundle-Installation aus. Ich hoffe das funktioniert auch bei dir.

Sean M.
quelle
0

Ich hatte auch Probleme mit libv8und mini_racer. Problem mit behoben

brew install v8

bundle update libv8 mini_racer

Mit den neuesten Versionen mini_racer 0.2.10und libv8 7.3.492.27arbeitete wie ein Zauber.

anka
quelle
0

Ich habe die folgenden Befehle auf meinem lokalen Befehl ausprobiert, es hat gut funktioniert:

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
quelle