ruby - railsinstaller - ''Error al crear la extensión nativa de la gema'' en Windows 7(el sistema no puede encontrar la ruta especificada)
ruby download for windows (7)
El problema en definitiva
Estoy en Windows y me gem install json —platform=ruby
el siguiente error al ejecutar gem install json —platform=ruby
:
The system cannot find the path specified.
Temporarily enhancing PATH to include DevKit...
Building native extensions. This could take a while...
The system cannot find the path specified.
ERROR: Error installing json:
ERROR: Failed to build gem native extension.
C:/Ruby193/bin/ruby.exe extconf.rb
creating Makefile
Gem files will remain installed in C:/Ruby193/lib/ruby/gems/1.9.1/gems/json-1.8.1 for inspection.
Results logged to C:/Ruby193/lib/ruby/gems/1.9.1/gems/json-1.8.1/ext/json/ext/generator/gem_make.out
Antecedentes y algunas investigaciones.
Primero que nada, no soy una persona de Windows, así que este es un mundo nuevo y valiente para mí. Haber heredado una computadora portátil del trabajo que tenía una colección de bibliotecas locas por todas partes, logré eliminar todas las instalaciones anteriores de ruby y Devkit y luego instalé lo siguiente:
- Ruby 1.9.3p484 con Ruby Installer en
C:/Ruby193
- Ruby 2.0.0p353 con Ruby Installer en
C:/Ruby200
- Devkit
DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe
(para ruby 1x) extraído enC:/Ruby193-devkit
- Devkit
DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe
(32 bits para ruby 2x) extraído enC:/Ruby200-devkit-x32
.
Luego instalé Pik 0.2.8 como una gema y ejecuté pik_install
en un nuevo directorio C:/bin
según las instrucciones de instalación.
Mi PATH se parece a esto:
PATH=C:/bin;C:/Ruby193/bin;C:/windows;C:/windows/system32;C:/windows/system32/Wbem;c:/Program Files (x86)/Microsoft SQL Server/100/Tools/Binn/;c:/Program Files/Microsoft SQL Server/100/Tools/Binn/;c:/Program Files/Microsoft SQL Server/100/DTS/Binn/;C:/Program Files (x86)/Common Files/Roxio Shared/DLLShared/;C:/Program Files/Java/jdk1.6.0_33/bin;C:/Program Files (x86)/Common Files/Apple/Mobile Device Support/;C:/Program Files (x86)/Common Files/Apple/Apple Application Support;C:/Program Files (x86)/QuickTime/QTSystem/;C:/Program Files/TortoiseSVN/bin;C:/inpath;C:/Program Files (x86)/WinMerge;C:/ChromeDriver;C:/Program Files/WIDCOMM/Bluetooth Software/;C:/Program Files/WIDCOMM/Bluetooth Software/syswow64
Lo importante es que C:/bin
y C:/Ruby193/bin
están en la ruta. Esto significa que ruby 1.9.3 se carga de forma predeterminada cuando pik use 2.0.0p353
un shell y puedo cambiar exitosamente a 2.0.0 con pik use 2.0.0p353
. En otras palabras, pik funciona bien.
Devkit está diseñado para permitir la compilación de binarios nativos de C / C ++ desde gemas en Windows, a fin de utilizar un binario precompilado de ventanas.
Como tengo dos versiones de ruby instaladas, y cada una requiere un devkit diferente (una para 2x y otra para 1x), tuve que hacer la configuración para devkit dos veces:
cd C:/Ruby193-devkit
ruby dk.rb init
# Edit config.yml to remove all but Ruby193
ruby dk.rb install
cd C:/Ruby200-devkit
ruby dk.rb init
# Edit config.yml to remove all but C:/Ruby200
ruby dk.rb install
En este punto debería haber podido ejecutar gem install json —platform=ruby
éxito, pero obtuve el error anterior. Después de una pequeña investigación , descubrí esto , que aconseja verificar que COMSPEC esté correctamente configurado y eliminar cualquier clave de AutoRun de HKEY_CURRENT_USER/Software/Microsoft/Command Processor
. Tuve una de ANSIcon y la eliminé debidamente.
Desafortunadamente todavía no pude instalar la gema json.
Entonces me di cuenta de que tal vez se estaba utilizando la versión incorrecta de GCC o que no se había encontrado. Las dos versiones de Devkit vienen con diferentes versiones de gcc:
> C:/Ruby193-devkit/mingw/bin/gcc —version
gcc (tdm-1) 4.5.2
> C:/Ruby200-devkit-x32/mingw/bin/gcc —version
gcc (rubenv-4.7.2-release) 4.7.2
Luego me pregunté si pik no estaba cargando la versión de devtools (y por lo tanto gcc) para la versión específica de ruby que había escogido, y siempre estaba usando 1.9.3. Gracias a este artículo , parece que ese no es el caso:
> pik use 193
> where ruby
C:/Ruby193/bin/ruby.exe
> cat C:/Ruby193/lib/ruby/site_ruby/devkit.rb
# enable RubyInstaller DevKit usage as a vendorable helper library
unless ENV[''PATH''].include?(''C://Ruby193-devkit//mingw//bin'') then
puts ''Temporarily enhancing PATH to include DevKit...''
ENV[''PATH''] = ''C://Ruby193-devkit//bin;C://Ruby193-devkit//mingw//bin;'' + ENV[''PATH'']
end
ENV[''RI_DEVKIT''] = ''C://Ruby193-devkit''
ENV[''CC''] = ''gcc''
ENV[''CXX''] = ''g++''
ENV[''CPP''] = ''cpp''
> pik use 200
> where ruby
C:/Ruby200/bin/ruby.exe
> cat C:/Ruby200/lib/ruby/site_ruby/devkit.rb
# enable RubyInstaller DevKit usage as a vendorable helper library
unless ENV[''PATH''].include?(''C://Ruby200-devkit-x32//mingw//bin'') then
phrase = ''Temporarily enhancing PATH to include DevKit...''
if defined?(Gem)
Gem.ui.say(phrase) if Gem.configuration.verbose
else
puts phrase
end
puts "Prepending ENV[''PATH''] to include DevKit..." if $DEBUG
ENV[''PATH''] = ''C://Ruby200-devkit-x32//bin;C://Ruby200-devkit-x32//mingw//bin;'' + ENV[''PATH'']
end
ENV[''RI_DEVKIT''] = ''C://Ruby200-devkit-x32''
ENV[''CC''] = ''gcc''
ENV[''CXX''] = ''g++''
ENV[''CPP''] = ''cpp''
(En realidad no tengo el gato disponible en Windows, pero es una explicación más clara)
Como puede ver, parece que la versión correcta de devkit está siendo agregada a la ruta por devkit.rb, que obviamente se está cargando porque mi error contiene ''Mejorar temporalmente el PATH para incluir DevKit ...''.
Volver al error original
Era:
The system cannot find the path specified.
Temporarily enhancing PATH to include DevKit...
Building native extensions. This could take a while...
The system cannot find the path specified.
ERROR: Error installing json:
ERROR: Failed to build gem native extension.
C:/Ruby193/bin/ruby.exe extconf.rb
creating Makefile
Gem files will remain installed in C:/Ruby193/lib/ruby/gems/1.9.1/gems/json-1.8.1 for inspection.
Results logged to C:/Ruby193/lib/ruby/gems/1.9.1/gems/json-1.8.1/ext/json/ext/generator/gem_make.out
Desafortunadamente, el registro de resultados no ofrece exactamente mucha ayuda. Esto es lo que parece gem_make.out:
C:/Ruby193/bin/ruby.exe extconf.rb
creating Makefile
Pensé que extconf.rb
podría ofrecer algo de ayuda, pero no puedo hacer nada al respecto:
require ''mkmf''
unless $CFLAGS.gsub!(/ -O[/dsz]?/, '' -O3'')
$CFLAGS << '' -O3''
end
if CONFIG[''CC''] =~ /gcc/
$CFLAGS << '' -Wall''
unless $DEBUG && !$CFLAGS.gsub!(/ -O[/dsz]?/, '' -O0 -ggdb'')
$CFLAGS << '' -O0 -ggdb''
end
end
$defs << "-DJSON_GENERATOR"
create_makefile ''json/ext/generator''
El Makefile en C:/Ruby193/lib/ruby/gems/1.9.1/gems/json-1.8.1/ext/json/ext/generator
parece a esto . Me parece extraño que este Makefile incluso esté siendo creado.
Si alguien con un poco más de experiencia con Windows / Ruby puede arrojar alguna luz sobre esto, ¡sería increíble!
PD. Estoy en Windows 7 Professional SP1
Actualizar después de un poco más de excavación
Así que quería comprobar que devkit estaba mejorando el camino con los directorios de devkit correctos. Gracias a una sugerencia de otra pregunta de SO, moví las instalaciones de devkit dentro de los directorios de Ruby:
El devkit tdm ahora vive en C:/Ruby193/devkit
mientras que el mingw64 vive en C:/Ruby200/devkit
. Después de ejecutar ruby dk.rb install -f
para cada devkit, abrí ambos archivos devkit.rb para verificar que la ruta se haya actualizado correctamente. Lo hicieron, y actualicé las opciones, por lo que debería imprimir "La mejora temporal de PATH incluye DevKit for 1.9" o "La mejora temporal de PATH incluye DevKit for 2". A modo de confirmación de que se está cargando el devkit correcto:
C:/>pik 193
C:/>ruby -rdevkit -ve "puts ENV[''PATH'']"
ruby 1.9.3p484 (2013-11-22) [i386-mingw32]
Temporarily enhancing PATH to include DevKit for 1.9...
C:/Ruby193/devkit/bin;C:/Ruby193/devkit/mingw/bin;C:/bin;C:/Ruby193/bin;C:/windows;C:/windows/system32;C:/windows/system32/Wbem;c:/Program Files (x86)
/Microsoft SQL Server/100/Tools/Binn/;c:/Program Files/Microsoft SQL Server/100/Tools/Binn/;c:/Program Files/Microsoft SQL Server/100/DTS/Binn/;C:/Pro
gram Files (x86)/Common Files/Roxio Shared/DLLShared/;C:/Program Files/Java/jdk1.6.0_33/bin;C:/Program Files (x86)/Common Files/Apple/Mobile Device Su
pport/;C:/Program Files (x86)/Common Files/Apple/Apple Application Support;C:/Program Files (x86)/QuickTime/QTSystem/;C:/Program Files/TortoiseSVN/bin
;C:/inpath;C:/Program Files (x86)/WinMerge;C:/ChromeDriver;C:/Program Files/WIDCOMM/Bluetooth Software/;C:/Program Files/WIDCOMM/Bluetooth Software/sy
swow64
C:/>pik 200
C:/>ruby -rdevkit -ve "puts ENV[''PATH'']"
ruby 2.0.0p353 (2013-11-22) [i386-mingw32]
Temporarily enhancing PATH to include DevKit for 2...
C:/Ruby200/devkit/bin;C:/Ruby200/devkit/mingw/bin;C:/bin;C:/Ruby200/bin;C:/windows;C:/windows/system32;C:/windows/system32/Wbem;c:/Program Files (x86)
/Microsoft SQL Server/100/Tools/Binn/;c:/Program Files/Microsoft SQL Server/100/Tools/Binn/;c:/Program Files/Microsoft SQL Server/100/DTS/Binn/;C:/Pro
gram Files (x86)/Common Files/Roxio Shared/DLLShared/;C:/Program Files/Java/jdk1.6.0_33/bin;C:/Program Files (x86)/Common Files/Apple/Mobile Device Su
pport/;C:/Program Files (x86)/Common Files/Apple/Apple Application Support;C:/Program Files (x86)/QuickTime/QTSystem/;C:/Program Files/TortoiseSVN/bin
;C:/inpath;C:/Program Files (x86)/WinMerge;C:/ChromeDriver;C:/Program Files/WIDCOMM/Bluetooth Software/;C:/Program Files/WIDCOMM/Bluetooth Software/sy
swow64
Para que todo se vea como funciona correctamente. pero:
C:/>gem install json --platform=ruby
Temporarily enhancing PATH to include DevKit for 2...
Building native extensions. This could take a while...
The system cannot find the path specified.
ERROR: Error installing json:
ERROR: Failed to build gem native extension.
C:/Ruby200/bin/ruby.exe extconf.rb
creating Makefile
Gem files will remain installed in C:/Ruby200/lib/ruby/gems/2.0.0/gems/json-1.8.1 for inspection.
Results logged to C:/Ruby200/lib/ruby/gems/2.0.0/gems/json-1.8.1/ext/json/ext/generator/gem_make.out
C:/>pik 193
C:/>gem install json --platform=ruby
Temporarily enhancing PATH to include DevKit...
Building native extensions. This could take a while...
The system cannot find the path specified.
ERROR: Error installing json:
ERROR: Failed to build gem native extension.
C:/Ruby193/bin/ruby.exe extconf.rb
creating Makefile
Gem files will remain installed in C:/Ruby193/lib/ruby/gems/1.9.1/gems/json-1.8.1 for inspection.
Results logged to C:/Ruby193/lib/ruby/gems/1.9.1/gems/json-1.8.1/ext/json/ext/generator/gem_make.out
Esto claramente nos dice dos cosas:
- Se está cargando algún otro archivo devkit.rb cuando estoy usando ruby 1.9, ya que el mensaje ''for 1.9'' no se está imprimiendo.
- Es poco probable que este sea el problema real, ya que el error es idéntico en ambos casos.
Voy a ver si puedo compilar manualmente usando los Makefiles generados.
Así que esta no es la mejor respuesta del mundo, pero parece que encontré una solución. Si configuro la bandera verbosa, todo funciona bien:
gem install json --platform=ruby --verbose
Hay un registro aquí: http://gist.github.com/dannysmith/8055495
Eso no tiene sentido, sería genial si alguien pudiera explicar por qué esto parece haber solucionado el error. Tal vez esto es un error en devkit?
Asegúrese de que la versión de ruby que instaló (32 o 64 bits) coincida con la versión de DevKit. Ambos tienen que ser 32 o 64, que era el problema que estaba teniendo. Puede que no sea el problema exacto aquí, pero pensé que lo tiraría por ahí. Aquí hay una publicación que vale la pena revisar:
Cómo lo arreglé:
- Descargué el último instalador de ruby desde https://rubyinstaller.org/downloads/
- Ejecute el instalador, siguiendo las indicaciones para instalar dependencias.
- Reinicié mi computadora
- Agregué el directorio ruby / bin a mi PATH.
He instalado gem json con las versiones 1.8.1, pero no pude resolver este problema para json 1.6.1 usando
gem install json --platform=ruby --verbose
Entonces, lo intenté desde aquí https://github.com/oneclick/rubyinstaller/issues/184
gem update --system 2.0.3
Y después de eso
gem install json -v 1.6.1 --platform=ruby --verbose
Resuelve el problema específico de json 1.6.1 para la máquina Win 7 (64 bits)
Instala la versión de 32 bits en Windows ...
ver
windows 6.1.76011
64 bits dio un mensaje de error sobre makefile y encabezados. Intenté todas las demás sugerencias, incluidas las de Rubyinstaller sobre COMSPEC y el registro, agregando gcc a la ruta y otras. Algunas gemas se instalarían, pero git_fame y json no serían tan necesarias para compilar.
Edición: Parece que git_fame usa mimer_plus. mimer_plus asume herramientas gnu (herramientas unix). Parece que necesitas instalar mingw primero. Eso no estaba claramente indicado en la página de Rubyinstaller.
Intente ejecutar el símbolo del sistema en el modo de administración. Después de unas 7-10 horas me di cuenta de esto ...
Yo tuve el mismo problema. Usé PowerShell para revisar mi camino
ps> $ s = $ env: ruta
ps> $ s.split ("{;}")
seguro que mi ruby mingw no estaba en el camino. Tenía el ruby / bin en la ruta, pero el mingw / bin estaba en una carpeta diferente. Entré en la ruta de mi entorno, lo agregué y mi instalación funcionó.