webentwicklung-frage-antwort-db.com.de

`gem install therubyracer` schlägt unter Mac OS X Lion fehl

Ich würde mich über eine Hilfe freuen, um gem install therubyracer Zum Laufen zu bringen. Hier ist der Fehler:

$ gem install therubyracer
Building native extensions.  This could take a while...
ERROR:  Error installing therubyracer:
    ERROR: Failed to build gem native extension.

        /Users/david/.rvm/rubies/Ruby-1.9.3-p194/bin/Ruby extconf.rb
checking for main() in -lobjc... yes
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --Ruby=/Users/david/.rvm/rubies/Ruby-1.9.3-p194/bin/Ruby
    --with-objclib
    --without-objclib
extconf.rb:15:in `<main>': undefined method `include_path' for Libv8:Module (NoMethodError)

Hier sind einige bemerkenswerte Schritte, die ich vor dem Fehler ausgeführt habe. Sie haben gut funktioniert:

$ gem install libv8
$ brew install v8

Meine Umgebung ist:

  • Mac OS X Lion 10.7.4
  • Ruby 1.9.3p194 (2012-04-20, Revision 35410) [x86_64-darwin11.4.0] (über rvm)
  • V8 Version 3.9.24 (über Homebrew)
71
David J.

Das hat bei mir funktioniert:

$ gem uninstall libv8
$ gem install therubyracer

(Ein großes Dankeschön an http://www.Ruby-forum.com/topic/4306127 )

106
David J.
gem uninstall libv8
brew install v8
gem install therubyracer
43
Ken Mazaika

Aber warum passiert das, fragst du? Und warum behebt die Deinstallation von libv8 Und die Neuinstallation von therubyracer das Problem?

Die Antwort befindet sich am Ende der Fehlermeldung (von orig post). Ignoriere das Zeug

probably lack of necessary libraries and/or headers

Dies ist eine falsche Annahme von demjenigen, der diese Fehlermeldung geschrieben hat. Unten sehen Sie, was Ruby zu sagen hat:

undefined method `include_path' for Libv8:Module

In meinem Fall habe ich versucht, therubyracer-0.9.8 Mit bundle install Zu installieren, und aus irgendeinem Grund habe ich versucht, meine Kopie von libv8-3.11.8.13 Zu verwenden, die irgendwann installiert wurde , wahrscheinlich als abhängigkeit von einem anderen juwel.

Ich weiß nicht, warum versucht wurde, die neuere Version zu verwenden, da therubyracer.gemspecs.add_dependency "libv8", "~> 3.3.10" Enthält. Und mein Gemfile.lock Sagt, dass ich libv8 (3.3.10.2) benutzen soll. Aber leider geschah das tatsächlich.

Und es ist wahr, dass Libv8:Modulenicht die Methode include_path In libv8-3.11.8.13 Hat, aber es tut in libv8-3.3.10.2

Deshalb funktioniert die Deinstallation von all Ihrer Versionen von libv8 Und die anschließende Neuinstallation von therubyracer. Weil alle Versionen von libv8, Die nicht haben die Methode include_path Vollständig entfernt werden, und die libv8, Die haben Die Methode include path wird neu installiert, wenn Sie therubyracer neu installieren.

40
Mars Redwyne

Da ich keine davon in Betracht zog, wenn das oben Genannte zu 100% für mich funktioniert, dachte ich, ich würde posten, was getan wurde (im Rahmen eines Rails -Projekts):

gem uninstall libv8
bundle update therubyracer

Dadurch wurde sichergestellt, dass ich die neueste therubyracer und auch eine neuere Version von libV8 Habe und die zahlreichen Probleme, die ich hatte, von fehlenden libv8.a-Dateien bis zu undefinierten Methoden zu beheben scheine.

15
Abe Petrillo

Zuletzt benutze ich den Tubyracer 0.11.0beta5 als Lösung.

Verwendung des Tubyracers (0.11.0beta5)

füge folgendes zu Gemfile hinzu

gem 'therubyracer', '~> 0.11.0beta5'
group :libv8 do
  gem 'libv8', "~> 3.11.8"
end

dann bundle install

Mac OS X 10.8 Moutain Lion

12
szpapas

Wenn Sie 0.11.3 Benötigen und es nicht funktioniert, versuchen Sie es mit Mac OS X 10.9 ...

gem uninstall libv8
brew install v8
gem install libv8 -- --with-system-v8
gem install therubyracer -v '0.11.3' -- --with-system-v8

Siehe diese Ausgabe für weitere Einzelheiten.

Wahrscheinlich brauchen Sie das -- --with-system-v8 In der letzten Zeile nicht, aber ich habe es aus Sicherheitsgründen getan, da ich gesehen habe, dass es Fetching: libv8-3.11.8.17-x86_64-darwin-13.gem (1%) ausführt, als ich den Befehl ausgeführt habe ...

Jedenfalls hat es bei mir geklappt, als alle anderen Dinge nicht geklappt haben.

10
cwd

Für alle, die auf Mac OS X 10.8 Mountain Lion auf dieses Problem stoßen, wenn sie versuchen, ihre Gemfile mit gem 'therubyracer', '0.11.0' Zu aktualisieren, hat nur das Upgrade des Systemedels libv8 Funktioniert Ich (keine Deinstallation eines anderen Gems notwendig):

$ gem update libv8
$ bundle install

Bearbeiten

Wenn Sie Travis-CI (oder andere CI-Tools auf anderen Servern verwenden, nehme ich an), müssen Sie Ihrem den Edelstein libv8 Explizit hinzufügen. Gemfile auch:

Gemfile

gem 'libv8', '3.11.8.3'

dann bundle install wie gewohnt. Beachten Sie, dass die Installation von libv8 Sehr viel Zeit in Anspruch nehmen kann, und ich habe festgestellt, dass dies die Ursache für ein Überschreiten von Zeitlimits für Travis CI sein kann, was dazu führt, dass Ihr Build erstellt wird Scheitern. Sie können dies etwas abschwächen, indem Sie die Edelsteine ​​der Entwicklungsumgebung in Ihren Builds nicht einbeziehen:

. travis.yml

# ...
bundler_args: --binstubs=./bundler_stubs --without development

Aktualisieren

Ja, so ziemlich alle meine Travis-Builds haben eine Zeitüberschreitung und scheitern daran. Wenn jemand einen Weg kennt, um dieses Problem zu lösen (ich hoffe, dass "downgrade therubyracer" ein letzter Ausweg ist), hinterlasse bitte einen Kommentar!

Update 2

Dies funktioniert möglicherweise nicht für alle Apps, aber es scheint, dass meine Rails 3.2.9-Apps doch nicht wirklich therubyracer oder libv8 Benötigten. Nachdem ich diese Edelsteine ​​aus meinem Gemfile entfernt hatte, bestätigte ich, dass meine Spezifikationen bestanden, schob sie erneut an Travis und es wurde erfolgreich gebaut. Also, ich denke, diese Edelsteine ​​loszuwerden (wenn Sie nicht sicher sind, ob Sie sie wirklich brauchen) ist zumindest einen Versuch wert.

Update 3

Dank Paul Annesley für die Bestätigung, dass Sie unter Mac OS X 10.8 Mountain Lion überhaupt kein therubyracer gem benötigen, da das Betriebssystem bereits mit Apple JavaScriptCore, ein eigener Javascript-Runner. Zum Zeitpunkt der ursprünglichen Antwort war ich auf Snow Leopard und brauchte es daher.

7
Paul Fioravanti

Entfernen der Datei Gemfile.lock und Ausführen von bundle install hat es magisch gemacht.

4
Alex Weber

OSX 10.8.2, Ruby 1.9.3p125

Keines der oben genannten Probleme hat bei mir funktioniert ... Ich hatte es satt, das richtige Juwel für meine Umgebung zu finden, also habe ich nur einen weichen Link zu dem g ++ - Ziel erstellt, dem diese Dinge fehlten:

Sudo ln -s `which g++` /usr/bin/g++-4.2

Nicht so hilfreich für Remote-Bereitstellungen, aber erledigen Sie die Arbeit auf meiner Workstation.

3
Colby Blair

Ich habe ein ähnliches Problem, aber es hat sich auch darüber beschwert, dass g ++ - 4.2 nicht gefunden wurde. Ich tat hatte XCode-Befehlszeilen-Tools installiert, aber es suchte nach /usr/bin/g++-4.2, ich hatte g ++ (das war ein symbolischer Link, der auf llvm-g ++ - 4.2 zeigte). Wie auch immer, ich habe gerade einen symbolischen Link zu g ++ erstellt und versucht, das Bundle erneut zu installieren ... es hat funktioniert!

$ cd /usr/bin

$ Sudo ln -s g++ g++-4.2

1
richardun

Hatte den gleichen Fehler, das hat bei mir geklappt:

  1. Von der Konsole: gem uninstall libv8

  2. Fügen Sie in Ihrer Gemdatei Folgendes hinzu:

    gem 'therubyracer', :platforms => :Ruby, :require => 'v8'
    gem 'libv8', '~> 3.11.8'  # Update version number as needed
    
  3. Von der Konsole: bundle install

Wenn du gerade dabei warst, den Rubyracer-Edelstein zu aktualisieren, solltest du bundle update therubyracer danach auch. (Erwägen Sie die Angabe einer Versionsnummer)

Dies war auf Mac 10.6 (Snow Leopard).

0
michaeldwp