J'apprécierais un peu d'aide pour obtenir gem install therubyracer
travailler. Voici l'erreur:
$ 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)
Voici quelques étapes notables que j'ai exécutées avant l'erreur. Ils ont bien fonctionné:
$ gem install libv8
$ brew install v8
Mon environnement est:
Cela a fonctionné pour moi:
$ gem uninstall libv8
$ gem install therubyracer
(Un grand merci à http://www.Ruby-forum.com/topic/4306127 )
gem uninstall libv8
brew install v8
gem install therubyracer
Mais, pourquoi est-ce que cela se produit, demandez-vous? Et pourquoi la désinstallation de libv8
Et la réinstallation de therubyracer
résolvent-elles le problème?
La réponse se trouve au bas du message d'erreur (du poste d'origine). Ignorer les trucs sur
probably lack of necessary libraries and/or headers
Il s'agit d'une hypothèse incorrecte de la personne qui a écrit ce message d'erreur. En bas, vous voyez ce que Ruby a à dire à ce sujet:
undefined method `include_path' for Libv8:Module
Dans mon cas, j'essayais d'installer therubyracer-0.9.8
Avec bundle install
, Et pour une raison quelconque, il essayait d'utiliser ma copie de libv8-3.11.8.13
, Qui avait été installée à un moment donné , probablement comme une dépendance d'un autre joyau.
Je ne sais pas pourquoi il essayait d'utiliser la nouvelle version, car therubyracer.gemspec
Contient s.add_dependency "libv8", "~> 3.3.10"
. Et mon Gemfile.lock
Dit d'utiliser libv8 (3.3.10.2)
. Mais hélas, c'est bien ce qui se passait.
Et il est vrai que Libv8:Module
A pas la méthode include_path
Dans libv8-3.11.8.13
, Mais fait dans libv8-3.3.10.2
C'est pourquoi la désinstallation de all de vos versions de libv8
Puis la réinstallation de therubyracer
fonctionne. Parce que toutes les versions de libv8
Qui n'ont pas la méthode include_path
Sont complètement supprimées, et le libv8
Que a la méthode include
path est réinstallée lors de la réinstallation de therubyracer
.
Compte tenu de rien si ce qui précède a fonctionné pour moi à 100%, j'ai pensé publier ce qui a fait (dans le cadre d'un projet Rails):
gem uninstall libv8
bundle update therubyracer
Cela m'a permis d'obtenir la dernière therubyracer
, ainsi qu'une version plus récente de libV8
, et semblent résoudre les multiples problèmes que je rencontrais, des fichiers libv8.a manquants aux méthodes non définies.
Enfin j'utilise le therubyracer 0.11.0beta5 comme solution.
Utilisation du therubyracer (0.11.0beta5)
ajouter le suivant sur Gemfile
gem 'therubyracer', '~> 0.11.0beta5'
group :libv8 do
gem 'libv8', "~> 3.11.8"
end
puis bundle install
Mac OSX 10.8 Moutain Lion
Si vous avez besoin de 0.11.3
Et qu'il échoue, essayez ceci pour 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
Voir ce problème pour plus de détails.
Vous n'avez probablement pas besoin du -- --with-system-v8
Sur la dernière ligne mais je l'ai fait juste pour être sûr car je l'ai vu commencer à faire Fetching: libv8-3.11.8.17-x86_64-darwin-13.gem (1%)
quand j'ai exécuté la commande ...
Quoi qu'il en soit, cela a fonctionné pour moi quand toutes les autres choses n'ont pas fonctionné.
Pour tous ceux qui rencontrent ce problème sur Mac OSX 10.8 Mountain Lion lorsqu'ils tentent de mettre à niveau leur Gemfile avec gem 'therubyracer', '0.11.0'
, il suffit de mettre à niveau le système libv8
gem a fonctionné pour moi (aucune désinstallation d'aucun autre gem nécessaire):
$ gem update libv8
$ bundle install
Si vous utilisez Travis-CI (ou d'autres outils CI situés sur d'autres serveurs, je suppose), vous devrez ajouter explicitement le libv8
gem à votre Gemfile également:
Gemfile
gem 'libv8', '3.11.8.3'
puis bundle install
comme d'habitude. Notez simplement que libv8
peut prendre beaucoup de temps à installer et j'ai remarqué que cela peut finir par être la cause du dépassement les délais d'expiration de Travis CI , entraînant l'échec de votre build. Vous pouvez atténuer cela légèrement en n'incluant pas les gemmes de l'environnement de développement dans vos builds:
. travis.yml
# ...
bundler_args: --binstubs=./bundler_stubs --without development
Oui, à peu près tout mon délai de construction de Travis et échoue à cause de cela. Si quelqu'un connaît un moyen de résoudre ce problème (j'espère que "rétrograder therubyracer
" est un dernier recours), veuillez laisser un commentaire!
Cela peut ne pas fonctionner pour toutes les applications, mais il semble que mes applications Rails 3.2.9 n'avaient pas réellement besoin de therubyracer
ou libv8
après tout. Après avoir retiré ces gemmes de mon Gemfile , j'ai confirmé que mes spécifications avaient bien été transmises, repoussées à Travis et construit avec succès. Donc, je suppose que se débarrasser de ces joyaux (si vous n'êtes pas sûr d'en avoir réellement besoin) vaut au moins un essai.
Merci à Paul Annesley d'avoir confirmé que si vous êtes sur Mac OS X 10.8 Mountain Lion, vous n'avez pas du tout besoin de therubyracer
gem car le système d'exploitation est déjà fourni avec Apple JavaScriptCore, son propre runner Javascript. Au moment de la réponse d'origine, j'étais sur Snow Leopard et donc j'en avais besoin.
Pour moi, supprimer le fichier Gemfile.lock et exécuter bundle install
travaillé c'est magique.
OSX 10.8.2, Ruby 1.9.3p125
Rien de ce qui précède n'a fonctionné pour moi ... J'en avais marre d'essayer de trouver le bon bijou pour mon environnement, donc je suis simplement lié à la cible g ++, ce qui manquait:
Sudo ln -s `which g++` /usr/bin/g++-4.2
Pas aussi utile pour les déploiements à distance, mais faites le travail sur mon poste de travail.
J'ai eu un problème similaire, mais il se plaignait également de ne pas trouver g ++ - 4.2. J'ai ai installé des outils de ligne de commande XCode, mais il cherchait /usr/bin/g++-4.2, j'avais g ++ (qui était un lien symbolique pointant vers llvm-g ++ - 4.2). Quoi qu'il en soit, je viens de créer un lien symbolique vers g ++ et j'ai essayé à nouveau l'installation du bundle ... cela a fonctionné!
$ cd /usr/bin
$ Sudo ln -s g++ g++-4.2
Eu la même erreur, cela a fonctionné pour moi:
Depuis la console: gem uninstall libv8
Dans votre Gemfile, ajoutez ce qui suit:
gem 'therubyracer', :platforms => :Ruby, :require => 'v8'
gem 'libv8', '~> 3.11.8' # Update version number as needed
Depuis la console: bundle install
Si vous étiez en train de mettre à jour la gemme therubyracer, vous voudrez peut-être exécuter bundle update therubyracer
après cela aussi. (Pensez à spécifier un numéro de version)
C'était sur Mac 10.6 (Snow Leopard).