ruby rubygems v8

`gem install therubyracer` falla en Mac OS X Lion



rubygems v8 (11)

Esto funcionó para mí:

$ gem uninstall libv8 $ gem install therubyracer

(Muchas gracias a http://www.ruby-forum.com/topic/4306127 )

Agradecería ayuda para que la gem install therubyracer para que funcione. Aquí está el error:

$ 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)

Aquí hay algunos pasos notables que ejecuté antes del error. Funcionaron bien:

$ gem install libv8 $ brew install v8

Mi entorno es:

  • Mac OS X Lion 10.7.4
  • ruby 1.9.3p194 (revisión de 2012-04-20 35410) [x86_64-darwin11.4.0] (vía rvm)
  • V8 versión 3.9.24 (a través de homebrew)

OSX 10.8.2, ruby ​​1.9.3p125

Ninguno de los anteriores funcionó para mí ... Me cansé de tratar de encontrar la gema adecuada para mi entorno, así que simplemente ligé al objetivo de g ++ estas cosas faltaban:

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

No es tan útil para las implementaciones remotas, pero puedo hacer el trabajo en mi estación de trabajo.


Obtuve un problema similar, pero también me quejaba de no encontrar g ++ - 4.2. Tenía herramientas de línea de comandos de XCode instaladas, pero estaba buscando /usr/bin/g++-4.2, tenía g ++ (que era un enlace simbólico que apuntaba a llvm-g ++ - 4.2). De todos modos, acabo de crear un enlace simbólico a g ++ y probé la instalación del paquete nuevamente ... ¡funcionó!

$ cd /usr/bin

$ sudo ln -s g++ g++-4.2


Para cualquiera que encuentre este problema en Mac OSX 10.8 Mountain Lion cuando intente actualizar su Gemfile con gem ''therubyracer'', ''0.11.0'' , solo actualizará la libv8 del sistema libv8 que me funcionó (no es necesaria la desinstalación de ninguna otra gema):

$ gem update libv8 $ bundle install

Editar

Si usa Travis-CI (u otras herramientas de CI ubicadas en otros servidores, supongo), también deberá agregar explícitamente la gema libv8 a su Gemfile :

Gemfile

gem ''libv8'', ''3.11.8.3''

luego bundle install como de costumbre. Solo tenga en cuenta que libv8 puede llevar una cantidad significativa de tiempo para instalar y me he dado cuenta de que puede terminar siendo la causa de superar los límites de tiempo de espera de Travis CI , lo que hace que su compilación falle. Puede mitigar esto ligeramente sin incluir las gemas del entorno de desarrollo en sus compilaciones:

.travis.yml

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

Actualizar

Sí, casi todo mi Travis construye tiempo de espera y falla debido a esto. Si alguien conoce una forma de resolver este problema (espero que "downgrade therubyracer " sea el último recurso), ¡por favor deje un comentario!

Actualización 2

Puede que esto no funcione para todas las aplicaciones, pero parece que mis aplicaciones Rails 3.2.9 en realidad no necesitaban therubyracer o libv8 después de todo. Después de eliminar esas gemas de mi Gemfile , confirmé que mis especificaciones pasaron, volvieron a presionar a Travis y se construyeron con éxito. Entonces, supongo que es mejor que te deshagas de esas gemas (si no estás seguro de que realmente las necesites).

Actualización 3

Gracias a Paul Annesley por confirmar que si tienes Mac OS X 10.8 Mountain Lion, no necesitas la gema de therubyracer ya que el sistema operativo ya viene incluido con JavaScriptCore de Apple, su propio corredor de JavaScript. En el momento de la respuesta original, estaba en Snow Leopard y, por lo tanto, lo necesitaba.


Para mí, eliminar el archivo Gemfile.lock y ejecutar la bundle install funcionó es magia.


Pero, ¿por qué sucede esto, preguntas? ¿Y por qué la desinstalación de libv8 y la reinstalación de therubyracer solucionan el problema?

La respuesta está en la parte inferior del mensaje de error (desde la publicación original). Ignora las cosas sobre

probably lack of necessary libraries and/or headers

Esta es una suposición incorrecta de quien escribió ese mensaje de error. En la parte inferior, verá lo que Ruby tiene que decir al respecto:

undefined method `include_path'' for Libv8:Module

En mi caso, estaba tratando de instalar therubyracer-0.9.8 con bundle install , y por alguna razón, estaba tratando de usar mi copia de libv8-3.11.8.13 , que había sido instalada en algún momento, probablemente como una dependencia de alguna otra gema

No sé por qué estaba intentando usar la versión más nueva, porque therubyracer.gemspec contiene s.add_dependency "libv8", "~> 3.3.10" . Y mi Gemfile.lock dice que use libv8 (3.3.10.2) . Pero, por desgracia, eso es lo que estaba sucediendo.

Y es cierto que Libv8:Module no tiene el método include_path en libv8-3.11.8.13 , pero lo hace en libv8-3.3.10.2

Es por eso que desinstalar todas sus versiones de libv8 y luego volver a instalar therubyracer funciones de therubyracer . Porque todas las versiones de libv8 que no tienen el método include_path se eliminan por completo, y el libv8 que sí tiene el método include path se reinstala cuando reinstala therubyracer .


Por fin uso therubyracer 0.11.0beta5 como solución.

Usando therubyracer (0.11.0beta5)

agregar siguiente en Gemfile

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

luego bundle install

Mac OSX 10.8 Moutain Lion


Si necesita 0.11.3 y está fallando, pruebe esto con 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

Vea este problema para más detalles.

Probablemente no necesites -- --with-system-v8 en la última línea, pero lo hice solo para estar seguro ya que lo vi comenzar a hacer Fetching: libv8-3.11.8.17-x86_64-darwin-13.gem (1%) cuando ejecuté el comando ...

De todos modos, funcionó para mí cuando todas las demás cosas no.


Si no considero ninguno, si lo anterior funcionó para mí al 100%, pensé en publicar lo que hice (como parte de un proyecto de rieles):

gem uninstall libv8 bundle update therubyracer

Esto me aseguró de tener el último therubyracer , y también una versión más reciente de libV8 , y parece que solucionó los múltiples problemas que estaba teniendo, desde archivos libv8.a faltantes, hasta métodos no definidos.


Tenía el mismo error, esto funcionó para mí:

  1. Desde la consola: gem uninstall libv8

  2. En su Gemfile, agregue lo siguiente:

    gem ''therubyracer'', :platforms => :ruby, :require => ''v8'' gem ''libv8'', ''~> 3.11.8'' # Update version number as needed

  3. Desde consola: bundle install

Si estaba en el medio de la actualización de la gema de therubyracer, es posible que también desee ejecutar la bundle update therubyracer después de eso. (Considere especificar un número de versión)

Esto fue en Mac 10.6 (Snow Leopard).


gem uninstall libv8 brew install v8 gem install therubyracer