`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í:
Desde la consola:
gem uninstall libv8
En su Gemfile, agregue lo siguiente:
gem ''therubyracer'', :platforms => :ruby, :require => ''v8'' gem ''libv8'', ''~> 3.11.8'' # Update version number as needed
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