web-dev-qa-db-fra.com

`gem install therubyracer` échoue sur Mac OS X Lion

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:

  • Mac OS X Lion 10.7.4
  • Ruby 1.9.3p194 (2012-04-20 révision 35410) [x86_64-darwin11.4.0] (via rvm)
  • V8 version 3.9.24 (via homebrew)
71
David J.

Cela a fonctionné pour moi:

$ gem uninstall libv8
$ gem install therubyracer

(Un grand merci à http://www.Ruby-forum.com/topic/4306127 )

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

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.

40
Mars Redwyne

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.

15
Abe Petrillo

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

12
szpapas

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é.

10
cwd

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

Modifier

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

Mise à jour

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!

Mise à jour 2

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.

Mise à jour 3

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.

7
Paul Fioravanti

Pour moi, supprimer le fichier Gemfile.lock et exécuter bundle install travaillé c'est magique.

4
Alex Weber

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.

3
Colby Blair

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

1
richardun

Eu la même erreur, cela a fonctionné pour moi:

  1. Depuis la console: gem uninstall libv8

  2. Dans votre Gemfile, ajoutez ce qui suit:

    gem 'therubyracer', :platforms => :Ruby, :require => 'v8'
    gem 'libv8', '~> 3.11.8'  # Update version number as needed
    
  3. 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).

0
michaeldwp