Je suis sous Windows et j'obtiens le message d'erreur suivant lors de l'exécution de 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
Donc, tout d’abord, je ne suis pas un utilisateur de Windows, c’est donc un nouveau monde fantastique pour moi. Ayant hérité d'un ordinateur portable d'un travail qui contenait une collection folle de bibliothèques, j'ai réussi à supprimer toutes les installations précédentes de Ruby et du Devkit, puis à installer les éléments suivants:
C:/Ruby193
C:/Ruby200
DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe
(pour Ruby 1x) extrait dans C:/Ruby193-devkit
DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe
(32 bits pour Ruby 2x) extrait dans C:/Ruby200-devkit-x32
.J'ai ensuite installé Pik 0.2.8 en tant que gem et ai exécuté pik_install
dans un nouveau répertoire C:/bin
conformément aux instructions d'installation.
Mon chemin ressemble à ceci:
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
Les éléments importants étant que C:/bin
et C:/Ruby193/bin
sont dans le chemin. Cela signifie que Ruby 1.9.3 est chargé par défaut lorsque je lance un shell et que je peux passer avec succès à la version 2.0.0 avec pik use 2.0.0p353
. En d'autres termes, la pique fonctionne bien.
Devkit est destiné à permettre la compilation de binaires C/C++ natifs à partir de gems sous Windows, de manière à éviter l'utilisation de binaires Windows précompilés.
Comme j'ai deux versions de Ruby installées et que chacune nécessite un devkit différent (une pour 2x et une pour 1x), j'ai dû effectuer la configuration pour devkit deux fois:
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
À ce stade, j'aurais pu exécuter gem install json —platform=Ruby
avec succès, mais l'erreur ci-dessus s'est produite. Après avoir creusé un peu j'ai découvert ceci , qui conseille de vérifier que COMSPEC est défini correctement et de supprimer toutes les clés d'exécution automatique de HKEY_CURRENT_USER\Software\Microsoft\Command Processor
- j'en ai eu une de ANSIcon et je l'ai dûment supprimée.
Malheureusement, je n’étais toujours pas en mesure d’installer le json gem.
Je me suis alors rendu compte que peut-être la mauvaise version de GCC était utilisée ou introuvable. Les deux versions de Devkit sont fournies avec des versions différentes 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
Je me suis alors demandé si pik ne chargeait pas la version de devtools (et donc de gcc) pour la version spécifique de Ruby que j'avais choisie, et utilisait toujours la 1.9.3. Grâce à cet article , il semble que ce ne soit pas le cas:
> 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'
(Je n'ai pas de chat disponible sur les fenêtres, mais l'explication est plus claire)
Comme vous pouvez le constater, il semblerait que la version correcte de devkit soit ajoutée au chemin par devkit.rb, qui est évidemment chargé car mon erreur contient 'Amélioration temporaire de PATH pour inclure DevKit…'.
C'était:
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
Malheureusement, le journal des résultats n’offre pas beaucoup d’aide. Voici à quoi ressemble gem_make.out:
C:/Ruby193/bin/Ruby.exe extconf.rb
creating Makefile
Je pensais que extconf.rb
pourrait offrir de l’aide, mais je ne peux pas en tirer la tête ni la queue:
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'
Le Makefile dans C:/Ruby193/lib/Ruby/gems/1.9.1/gems/json-1.8.1/ext/json/ext/generator
ressemble à ceci . Il me semble étrange que ce Makefile soit même créé.
Si quelqu'un avec un peu plus d'expérience Windows/Ruby pouvait nous éclairer, ce serait étonnant!
PS. Je suis sous Windows 7 Professional SP1
Je voulais donc vérifier que devkit améliorait le chemin avec le bon répertoire de devkit. Grâce à une suggestion d'un autre SO question, j'ai déplacé les installations de devkit dans les répertoires Ruby:
Tdm devkit réside maintenant dans C:\Ruby193\devkit
tandis que le mingw64 réside dans C:\Ruby200\devkit
. Après avoir exécuté Ruby dk.rb install -f
pour chaque devkit, j'ai ouvert les deux fichiers devkit.rb pour vérifier que le chemin d'accès avait été mis à jour correctement. Ils avaient, et j’ai mis à jour les options de vente, il devrait donc indiquer "Amélioration temporaire de PATH inclut DevKit pour la version 1.9" ou "Amélioration temporaire de PATH inclut DevKit pour 2". En guise de confirmation que le bon devkit est en cours de chargement:
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
Alors que tout ressemble à cela fonctionne correctement. mais:
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
Cela nous dit clairement deux choses:
Je vais voir si je peux construire manuellement en utilisant les Makefiles générés.
Donc, ce n'est pas la meilleure réponse au monde, mais il semble que je suis tombé sur une solution. Si je mets le drapeau prolixe, tout fonctionne bien:
gem install json --platform=Ruby --verbose
Il y a un journal ici: http://Gist.github.com/dannysmith/8055495
Cela n'a aucun sens - ce serait formidable si quelqu'un pouvait expliquer pourquoi cela semble avoir corrigé l'erreur. C'est peut-être un bug dans devkit?
Gem json est installé avec les versions 1.8.1 mais je n’ai pas pu résoudre ce problème avec json 1.6.1 en utilisant
gem install json --platform=Ruby --verbose
Donc, j'ai essayé d'ici https://github.com/oneclick/rubyinstaller/issues/184
gem update --system 2.0.3
Et après ça
gem install json -v 1.6.1 --platform=Ruby --verbose
Il résout le problème spécifique à json 1.6.1 pour la machine Win 7 (64 bits)
Essayez d'exécuter l'invite de commande en mode administrateur. Après 7 à 10 heures, j'ai compris cela ...
Comment j'ai résolu le problème:
Installez la version 32 bits sur Windows ...
ver
windows 6.1.76011
64 bits donnaient un message d'erreur sur le makefile et les en-têtes. J'ai essayé toutes les autres suggestions, y compris celles sur rubyinstaller concernant COMSPEC et le registre, l'ajout de gcc à path, etc. Certaines gemmes seraient installées mais git_fame et json ne seraient pas nécessaires à la compilation.
Edit: Il semble que git_fame utilise mimer_plus. mimer_plus assume les outils GNU (outils Unix). On dirait que vous devez d'abord installer mingw. Ce n'était pas clairement indiqué sur la page rubyinstaller.
J'ai eu le même problème. J'ai utilisé PowerShell pour vérifier mon chemin
ps> $ s = $ env: chemin
ps> $ s.split ("{;}")
bien sûr, mon Ruby Mingw n'était pas sur le chemin. J'ai le Ruby\bin dans le chemin mais le mingw\bin était sous un autre dossier. Je suis allé dans mon chemin d’environnement et je l’ai ajouté et mon installation a fonctionné.
Assurez-vous que la version de Ruby que vous avez installée (32 ou 64 bits) correspond à la version de DevKit. Ils doivent tous les deux avoir 32 ou 64 ans, ce qui était le problème que j'avais. Ce n’est peut-être pas la question exacte ici, mais je pensais que jetterais ça là-bas. Voici un post à vérifier: