Question

Ceci est un suivi de cette question .

Lorsque j'émets la commande Mise à jour gem sous Windows, chaque fois qu'elle parvient à un gem dont la dernière version n’A PAS de binaires Windows, il va essayer de construire l'extension native qui, bien sûr, échouera. Par exemple:

Updating sqlite3-ruby
Building native extensions.  This could take a while...
ERROR:  While executing gem ... (Gem::Installer::ExtensionBuildError)
  ERROR: Failed to build gem native extension.

c:/ruby/bin/ruby.exe extconf.rb update
checking for fdatasync() in rt.lib... no
checking for sqlite3.h... no

nmake
'nmake' is not recognized as an internal or external command,
operable program or batch file.

L'ancien comportement d'avant la version 1.x consistant à demander au moins la plate-forme requise mise à jour possible. Maintenant, je ne peux pas mettre à jour du tout, sauf si je désinstalle le gemmes gênantes (actuellement sqlite3-ruby et hpricot), lancez la mise à jour, puis réinstallez les gemmes en utilisant le commutateur --version.

Quelqu'un at-il une solution à ce problème ou sommes-nous coincés avec elle?

Remarque:

$ gem -v
1.2.0

$ ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]

Note (26 septembre 2008): Je viens de mettre à jour Gems 1.3.0 et le problème persiste.

Remarque (18 novembre 2008): Vient de mettre à jour Gems 1.3.1 et le problème persiste.

Note (28 avril 2009): La dernière version de Gems ( 1.3.2 ) ignore désormais les gemmes pour lesquels la construction d'extensions natives échoue lors de la mise à jour; En d'autres termes, le problème est résolu. Hourra!

Était-ce utile?

La solution

Gemmes, à compter de la version 1.3.2 , ignorera maintenant les gemmes dont la construction a échoué. Mettez donc Rubygems à jour avec la dernière version. Le problème présenté ici devrait donc être résolu.

gem update --system

La solution suivante est désormais obsolète, mais je la laisse ici pour l'enregistrement.

J'ai lancé un fil de discussion sur ce sujet sur le forum Ruby (il s'agit d'un fin à la liste de diffusion). Il y a une discussion intéressante. ça vaut le détour. Il existe même une solution très astucieuse à ce problème:

`gem.bat outdated`.split(/\n/).map{|z|z.scan(/^[^[:space:]]+/)}.flatten.each{|z| `gem.bat update #{z}`}

Il appelle la commande joyau obsolète et crée une liste de tous les joyaux obsolètes. Il parcourt ensuite la liste et appelle gem update pour chaque gem obsolète. Si l'un d'eux échoue, il passe simplement au suivant.

Autres conseils

Il semble que nous soyons coincés. J'ai trouvé ici qu'il n'y avait pas de gem mswin32 pour la dernière version (1.2.4) , J’ai essayé de l’installer sur mon ordinateur et le même problème s’est posé.

L'installation de la version précédente fonctionne correctement:

gem install sqlite3-ruby --version '1.2.3'

Exécutez la commande ci-dessous et cela devrait fonctionner:

gem install sqlite3-ruby --platform=mswin32

L'examen de la liste de fichiers RubyForge de sqlite3-ruby révèle que la version 1.2.3 contient des gemmes construits avec Visual Studio 6 et MinGW (sqlite3-ruby-1.2.3-mswin32.gem & sqlite3-ruby-1.2.3-x86-mingw32.gem). Cependant, la version 1.2.4 ne possède pas de tels joyaux préconstruits.

Si vous avez Visual Studio 6 ou MinGW installé et que les variables d'environnement du compilateur sont configurées (au moins pour Visual Studio 6, mais vous n’êtes pas sûr de MinGW), la gemme doit être créée lors de l’installation. Je ne sais pas si les gemmes seront construites dans les nouvelles versions de Visual Studio.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top