Question

J'essaie d'installer Ruby Gems afin de pouvoir utiliser Ruby pour me avertir lorsque je reçois des messages Twitter.Cependant, après avoir fait un gem update --system, j'obtiens maintenant une erreur zlib à chaque fois que j'essaie de faire un gem install de n'importe quoi.Vous trouverez ci-dessous la sortie de la console que j'obtiens lorsque j'essaie d'installer des pierres précieuses Ruby.(avec la sortie de gem environment).

C:\data\ruby>gem install twitter
ERROR:  While executing gem ... (Zlib::BufError)
    buffer error

C:\data\ruby>gem update --system
Updating RubyGems
ERROR:  While executing gem ... (Zlib::BufError)
    buffer error

C:\data\ruby>gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 1.2.0
  - RUBY VERSION: 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
  - INSTALLATION DIRECTORY: c:/ruby/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: c:/ruby/bin/ruby.exe
  - EXECUTABLE DIRECTORY: c:/ruby/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-mswin32-60
  - GEM PATHS:
     - c:/ruby/lib/ruby/gems/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://gems.rubyforge.org/
Était-ce utile?

La solution

J'ai juste commencé à recevoir ça ce soir aussi.La recherche sur Google a révélé un tas de suggestions qui n'ont pas donné de résultats

gem update --system

et du code collé de jamis qui est censé remplacer une fonction dans package.rb mais l'original qu'il est censé remplacer est introuvable.

La réinstallation de Rubygems n'a pas aidé.Je réinstalle Ruby en ce moment ......... et c'est corrigé.Douleur cependant.

Autres conseils

Je l'ai trouvé !J'ai eu le même problème sous windows (il est apparu d'un coup sans que je fasse de mise à jour, mais peu importe) :

Cela a quelque chose à voir avec plusieurs versions de zlib en conflit (je pense).

Dans ruby/lib/ruby/1.8/i386-msvcrt, assurez-vous qu'il existe un fichier zlib.so.Dans mon cas, c'était déjà là.Sinon, vous pouvez essayer d'installer ruby-zlib.

Ensuite, allez dans ruby/lib/ruby/site_ruby/1.8./i386-msvcrt et supprimez-y le fichier zlib.so.

Dans Ruby/bin, il devrait y avoir un zlib1.dll.Pour une raison quelconque, ma version Ruby n'utilisait pas cette DLL.J'ai téléchargé la version la plus récente (1.2.3) et je l'y ai installée.J'ai dû le renommer en zlib.dll pour qu'il puisse être utilisé.

Et tada !Rubygems a de nouveau fonctionné.

J'espère que cela t'aides.

Tout d’abord, je remercie la personne qui a trouvé la solution au problème du zlib manquant.(Ce n'était pas moi.:-)

Malheureusement, j'ai perdu le lien vers la publication originale, mais l'essence de la solution sous Linux est de compiler Ruby tandis que les fichiers d'en-tête zlib sont disponibles pour le script de configuration Ruby.Sur Debian, cela signifie que les packages de développement zlib doivent être installés avant de commencer à compiler Ruby.

Le reste de mon texte ici ne contient rien de nouveau et il est encouragé à l'omettre, si vous vous sentez à l'aise pour personnaliser votre environnement d'exécution sur des systèmes d'exploitation de type UNIX.Ce qui suit est une combinaison d’une brève introduction à quelques bases et d’instructions étape par étape.

------Le-début-du-COMMENT-FAIRE-----------------------------

Si l'on souhaite exécuter un programme, disons irb, à partir d'une console, alors le fichier nommé irb est recherché dans les dossiers dans un ordre décrit par une variable d'environnement appelée PATH.Il est possible de voir la valeur du PATH en tapant dans un shell bash (et en appuyant sur la touche Entrée) :

echo $PATH

Par exemple, s'il y a 2 versions d'irb dans le système, l'une installée par le système de gestion de paquets "officiel", disons, yum ou apt-get, dans /usr/bin/irb et l'autre compilée par le utilisateur nommé scoobydoo et réside dans /home/scoobydoo/ourcompiledruby/bin alors la question se pose, lequel des deux irb est exécuté.

Si l'on écrit au /home/scoobydoo/.bashrc une ligne comme:

export PATH="/home/scoobydoo/ourcompiledruby/bin:/usr/bin"

et redémarre la coquille de bash en fermant la fenêtre du terminal et en ouvrant une nouvelle, puis en tapant IRB à la console, la / home / scoobydoo / ourcompiledruby / bin / irb est exécutée.Si l'on écrivait

export PATH="/usr/bin:/home/scoobydoo/ourcompiledruby/bin"

Aux /home/scoobydoo/.bashrc, alors le / usr / bin / irb serait exécuté.

En pratique, on veut écrire

export PATH="/home/scoobydoo/ourcompiledruby/bin:$PATH"

car cela ajoute toutes les valeurs que le PATH avait avant cette affectation au /home/scoobydoo/ourcompiledruby/bin.Sinon, il y aura des problèmes, car tous les outils courants ne résident pas dans le répertoire /usr/bin et on souhaite probablement utiliser plusieurs applications personnalisées.

La même logique s'applique aux bibliothèques, sauf que le nom de la variable d'environnement est LD_LIBRARY_PATH

L'utilisation de LD_LIBRARY_PATH et PATH permet aux utilisateurs ordinaires, qui n'ont pas d'accès root ou qui souhaitent expérimenter des logiciels peu fiables, de les créer et de les utiliser sans avoir besoin de privilèges root.

Le reste de ce mini-mode d'emploi suppose que nous allons construire notre propre version de Ruby et utiliser notre propre version presque indépendamment de ce qui est installé sur le système par le logiciel de gestion de paquets officiel de la distribution.

1)=============================

Tout d'abord, on crée quelques dossiers et on définit les variables d'environnement, afin que les dossiers soient "utiles".

mkdir /home/scoobydoo/ourcompiledruby
mkdir -p /home/scoobydoo/lib/our_gems

On ajoute les 2 lignes suivantes au /home/scoobydoo/.bashrc

export PATH="/home/scoobydoo/ourcompiledruby/bin:$PATH"
export GEM_HOME="/home/scoobydoo/lib/our_gems"

Redémarrez le shell bash en fermant la fenêtre de terminal actuelle et en ouvrant une nouvelle ou en tapant

bash

sur la ligne de commande de la fenêtre actuellement ouverte.Les modifications apportées au /home/scoobydoo/.bashrc n'ont aucun effet sur les fenêtres / sessions terminales qui ont été lancées avant la sauvegarde de la version modifiée du /home/scoobydoo/.bashrc L'idée est que le / home / scoobydoo /.Bashrc est exécuté automatiquement au début d'une session, même si l'on se connecte sur SSH.

2)=============================

On s'assure désormais que les packages de développement zlib sont disponibles sur le système.En avril 2011, je n'en avais pas encore réglé les détails, mais

apt-get install zlibc zlib1g-dev zlib1g

semble être suffisant sur un système Debian.L'idée est que le fichier de bibliothèque et les fichiers d'en-tête soient disponibles dans le chemin de recherche "officiel" du système.Habituellement, apt-get et placent les fichiers d'en-tête dans /usr/include et les fichiers de bibliothèque dans /usr/lib

3)=============================

Téléchargez et décompressez le fichier source tar.gz depuis le http://www.ruby-lang.org

./configure --prefix=/home/scoobydoo/ourcompiledruby
make
make install

4)=============================

Si une commande de console comme

which ruby

imprime sur la console

/home/scoobydoo/ourcompiledruby/bin/ruby

alors la version nouvellement compilée est celle qui est exécutée sur la commande

ruby --help

5)=============================

Le reste des programmes, gem, irb, etc., peuvent être correctement exécutés en utilisant des commandes telles que :

ruby `which gem` install rake
ruby `which irb`

Cela ne devrait pas être comme ça, mais depuis avril 2011, je n'ai pas trouvé de manière plus élégante de le faire.Si la

ruby `which gem` install rake

donne à nouveau l'erreur manquante zlib, alors il faut simplement essayer de comprendre comment rendre les fichiers et la bibliothèque d'inclusion zlib disponibles pour le script de configuration Ruby et recompiler.(Désolé, je n'ai actuellement pas de meilleure solution à proposer.)

Peut être une solution sale peut être d'ajouter les lignes suivantes au /home/scoobydoo/.bashrc

alias gem="`which ruby` `which gem` "
alias irb="`which ruby` `which irb` "

En fait, j'utilise habituellement

alias irb="`which ruby` -KU "

mais la gemme doit être exécutée sans donner au rubis les arguments "-KU", car sinon il y aura des erreurs.

------La-fin-du-COMMENT-FAIRE------------------------

Une réinstallation de Ruby a résolu ce problème.Ce n'est pas ce que je voulais ;Je voulais savoir pourquoi j'avais ce problème, mais tout est réglé.

Il apparaît le plus souvent lorsque votre téléchargement a échoué, c'est-à-direvous avez une gemme corrompue, en raison d'un délai d'attente du réseau, d'un téléchargement manuel défectueux ou autre.Réessayez simplement ou téléchargez les gemmes manuellement et pointez gem aux fichiers.

si gem update --system ne fonctionne pas et renomme ruby/bin/zlib1.dll à zlib.dll ça n'aide pas à essayer :

Fichier ouvert RUBY_DIR\lib\ruby\site_ruby\1.8\rubygems.rb

Et le remplacement existait def self.gunzip(data) par ça:

  def self.gunzip(data)
    require 'stringio'
    require 'zlib'
    data = StringIO.new data

    # Zlib::GzipReader.new(data).read
    data.read(10) # skip the gzip header
    zis = Zlib::Inflate.new(-Zlib::MAX_WBITS)
    is = StringIO.new(zis.inflate(data.read))
  end

Que diriez-vous de cd dans rubysrc/ext/zlib, alors ruby extendconf.rb, alors make, make install.

Après cela, réinstallez Ruby.

Je l'ai fait sur Ubuntu 10.04 et j'ai réussi.

Essayez de mettre à jour ZLib avant de faire autre chose.J'ai eu un problème similaire sur OS X et la mise à jour Compresser ::Zlib (une interface Perl vers ZLib) l'a guéri - donc je pense qu'une ancienne version de ZLib (est maintenant 1.2.3) c'est peut-être là que réside votre problème...

installez du ruby ​​zlib pur si tout le reste échoue

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