Ich würde mich über Hilfe bei gem install therubyracer
der Arbeit freuen . 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] (via rvm)
- V8 Version 3.9.24 (via Homebrew)
Antworten:
Das hat bei mir funktioniert:
$ gem uninstall libv8 $ gem install therubyracer
(Ein großes Dankeschön an http://www.ruby-forum.com/topic/4306127 )
quelle
rbenv
oder eine neuervm
Installation einzurichten und die Schritte (in einer Übersicht) aufzuschreiben, um das Problem einzugrenzen? Hast dubrew install v8
zuerst gemacht?quelle
Aber warum passiert das, fragst du? Und warum behebt die Deinstallation
libv8
und Neuinstallationtherubyracer
das Problem?Die Antwort befindet sich am Ende der Fehlermeldung (vom ursprünglichen Beitrag). 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 dazu zu sagen hat:
undefined method `include_path' for Libv8:Module
In meinem Fall habe ich versucht,
therubyracer-0.9.8
mit zu installierenbundle install
, und aus irgendeinem Grund habe ich versucht, meine Kopie vonlibv8-3.11.8.13
, die irgendwann installiert worden war, wahrscheinlich als Abhängigkeit von einem anderen Juwel zu verwenden.Ich weiß nicht, warum es versucht hat, die neuere Version zu verwenden, weil
therubyracer.gemspec
enthälts.add_dependency "libv8", "~> 3.3.10"
. Und meinGemfile.lock
sagt zu verwendenlibv8 (3.3.10.2)
. Aber leider geschah genau das.Und es ist wahr , dass
Libv8:Module
sie nicht die Methode hatinclude_path
inlibv8-3.11.8.13
, aber es tut inlibv8-3.3.10.2
Aus diesem Grund funktioniert die Deinstallation aller Versionen von
libv8
und die anschließende Neuinstallationtherubyracer
. Da alle Fassungen ,libv8
dass nicht über das Verfahreninclude_path
vollständig entfernt werden, und die ,libv8
das hat die Methodeinclude
Pfad neu installiert wird , wenn Sie neu installierentherubyracer
.quelle
Gemfile
keine spezielle Therubyracer-Version benötige. Dann habe ich die alteGemfile.lock
Version gelöscht, in der eine alte Therubyracer-Version angegeben war, für die wiederum die altelibv8
Version erforderlich war . (Jemand muss es zuvor für das Projekt festgeschrieben haben, und dann hat die Bundle-Installation versucht, es bei der Installation zu verwenden.) Als ich esbundle install
erneut ausführte, wurde ein neuesGemfile.lock
mit neuen Verbindungen erstellt und die neuestetherubyracer
Version mit der neuestenlibv8
Version verbunden, kein Problem.Da dies nicht zu 100% für mich funktioniert hat, dachte ich, ich würde posten, was getan wurde (als Teil eines Rails-Projekts):
Dies stellte sicher, dass ich die neueste
therubyracer
und auch eine neuere Version vonlibV8
bekam und die zahlreichen Probleme, die ich hatte, von fehlenden libv8.a-Dateien bis hin zu undefinierten Methoden, zu beheben schien.quelle
Zuletzt benutze ich Therubyracer 0.11.0beta5 als Lösung.
Verwendung des Therubyracers (0.11.0beta5)
füge folgendes auf Gemfile hinzu
gem 'therubyracer', '~> 0.11.0beta5' group :libv8 do gem 'libv8', "~> 3.11.8" end
dann
bundle install
Mac OSX 10.8 Moutain Lion
quelle
Wenn Sie es brauchen
0.11.3
und es fehlschlägt, probieren Sie es für Mac OS X 10.9 aus ...gem uninstall libv8 brew install v8 gem install libv8 -- --with-system-v8 gem install therubyracer -v '0.11.3' -- --with-system-v8
Siehe dieses ProblemWeitere Informationen finden .
Sie brauchen das wahrscheinlich nicht
-- --with-system-v8
in der letzten Zeile, aber ich habe es nur aus Sicherheitsgründen getan, da ich gesehen habe, wie es angefangen hat,Fetching: libv8-3.11.8.17-x86_64-darwin-13.gem (1%)
als ich den Befehl ausgeführt habe ...Jedenfalls hat es bei mir funktioniert, als all die anderen Dinge nicht funktionierten.
quelle
Für alle, die unter Mac OSX 10.8 Mountain Lion auf dieses Problem stoßen, wenn sie versuchen, ihre Gem-Datei mit zu aktualisieren, funktionierte
gem 'therubyracer', '0.11.0'
nur das Upgrade des System- Gemslibv8
für mich (keine Deinstallation eines anderen Gems erforderlich):$ gem update libv8 $ bundle install
Bearbeiten
Wenn Sie Travis-CI (oder andere CI-Tools auf anderen Servern, nehme ich an) verwenden, müssen Sie
libv8
das Gem explizit zu Ihrer Gemfile hinzufügen :Gemfile
gem 'libv8', '3.11.8.3'
dann
bundle install
wie gewohnt. Beachten Sie nur, dasslibv8
die Installation viel Zeit in Anspruch nehmen kann, und ich habe festgestellt, dass dies möglicherweise dazu führt, dass die Zeitlimits von Travis CI überschritten werden und Ihr Build fehlschlägt. Sie können dies leicht abmildern, indem Sie Edelsteine der Entwicklungsumgebung nicht in Ihre Builds einbeziehen:.travis.yml
# ... bundler_args: --binstubs=./bundler_stubs --without development
Aktualisieren
Ja, so ziemlich alle meine Travis bauen Timeout und scheitern daran. Wenn jemand einen Weg kennt, um dieses Problem zu lösen (ich würde hoffen, dass "Downgrade
therubyracer
" das letzte Mittel ist), hinterlassen Sie bitte einen Kommentar!Update 2
Dies funktioniert möglicherweise nicht für alle Apps, aber es scheint, dass meine Rails 3.2.9-Apps nicht wirklich
therubyracer
oder doch nicht benötigt wurdenlibv8
. Nachdem ich diese Edelsteine aus meiner Gemfile entfernt habe ich , bestätigte ich, dass meine Spezifikationen bestanden wurden, schob sie erneut an Travis und sie wurden erfolgreich erstellt. Ich denke, diese Edelsteine loszuwerden (wenn Sie nicht sicher sind, ob Sie sie tatsächlich brauchen) ist zumindest einen Versuch wert.Update 3
Vielen Dank an Paul Annesley für die Bestätigung, dass Sie unter Mac OS X 10.8 Mountain Lion überhaupt kein
therubyracer
Juwel benötigen, da das Betriebssystem bereits mit Apple JavaScriptCore, seinem eigenen Javascript-Runner, geliefert wird. Zum Zeitpunkt der ursprünglichen Antwort war ich auf Snow Leopard und brauchte es daher.quelle
therubyracer
oderlibv8
vermutlich bedeutet dies, dass Sie entweder kein CoffeeScript oder einen alternativen JS-Runner verwenden.therubyracer
unnötig gemacht hat ...?Für mich
bundle install
war es magisch , die Gemfile.lock-Datei zu entfernen und auszuführen .quelle
bundle update
praktisch dasselbe ist wie das LöschenGemfile.lock
und Ausführenbundle install
.OSX 10.8.2, Ruby 1.9.3p125
Keiner der oben genannten Punkte hat bei mir funktioniert ... Ich hatte es satt zu versuchen, das richtige Juwel für meine Umgebung zu finden, also habe ich nur eine weiche Verknüpfung mit dem g ++ - Ziel hergestellt, bei 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.
quelle
Ich habe ein ähnliches Problem, aber es hat sich auch darüber beschwert, dass ich g ++ - 4.2 nicht gefunden habe. Ich hatte XCode-Befehlszeilentools installiert, aber es suchte nach /usr/bin/g++-4.2, ich hatte g ++ (ein symbolischer Link, der auf llvm-g ++ - 4.2 verweist). Wie auch immer, ich habe gerade einen symbolischen Link zu g ++ erstellt und die Bundle-Installation erneut versucht ... es hat funktioniert!
$ cd /usr/bin
$ sudo ln -s g++ g++-4.2
quelle
Hatte den gleichen Fehler, das hat bei mir funktioniert:
Von der Konsole:
gem uninstall libv8
Fügen Sie in Ihrer Gemfile Folgendes hinzu:
gem 'therubyracer', :platforms => :ruby, :require => 'v8' gem 'libv8', '~> 3.11.8' # Update version number as needed
Von der Konsole:
bundle install
Wenn Sie gerade dabei waren, den Edelsteinraub zu verbessern, möchten Sie vielleicht rennen
bundle update therubyracer
. (Geben Sie eine Versionsnummer an.)Dies war auf Mac 10.6 (Snow Leopard).
quelle