Frage

Ich versuche, einige Ruby Gems zu installieren, damit ich Ruby verwenden kann, um mich zu benachrichtigen, wenn ich Twitter-Nachrichten erhalte.Nachdem ich jedoch a gem update --system, erhalte ich jetzt jedes Mal einen Zlib-Fehler, wenn ich versuche, eine auszuführen gem install von irgendetwas.Unten ist die Konsolenausgabe, die ich erhalte, wenn ich versuche, Ruby Gems zu installieren.(zusammen mit der Ausgabe von 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/
War es hilfreich?

Lösung

Ich habe auch erst heute Abend damit angefangen.Beim Googeln kamen eine Reihe von Vorschlägen zum Vorschein, die keine Ergebnisse lieferten

gem update --system

und etwas Code von Jamis eingefügt, der eine Funktion in package.rb ersetzen soll, aber das Original, das er ersetzen soll, ist nirgends zu finden.

Eine Neuinstallation von Rubygems hat nicht geholfen.Ich installiere Ruby gerade neu.........und es ist behoben.Allerdings Schmerzen.

Andere Tipps

Fand es!Ich hatte das gleiche Problem unter Windows (es erschien plötzlich, ohne dass ich ein Update durchgeführt habe, aber was auch immer):

Es hat etwas mit mehreren widersprüchlichen Zlib-Versionen zu tun (glaube ich).

Stellen Sie in ruby/lib/ruby/1.8/i386-msvcrt sicher, dass eine zlib.so-Datei vorhanden ist.In meinem Fall war es schon da.Wenn nicht, können Sie versuchen, Ruby-zlib zu installieren.

Gehen Sie dann zu ruby/lib/ruby/site_ruby/1.8./i386-msvcrt und löschen Sie dort die Datei zlib.so.

In Ruby/bin sollte es eine zlib1.dll geben.Aus irgendeinem Grund hat meine Ruby-Version diese DLL nicht verwendet.Ich habe die neueste Version (1.2.3) heruntergeladen und dort installiert.Ich musste es in zlib.dll umbenennen, damit es verwendet werden konnte.

Und tada!Rubygems hat wieder funktioniert.

Hoffe das hilft.

Zunächst möchte ich mich bei der Person bedanken, die die Lösung für das fehlende Zlib-Problem gefunden hat.(Das war nicht ich.:-)

Leider habe ich den Link zum ursprünglichen Beitrag verloren, aber der Kern der Lösung unter Linux besteht darin, Ruby zu kompilieren, während Zlib-Header-Dateien für das Ruby-Konfigurationsskript verfügbar sind.Unter Debian bedeutet das, dass zlib-Entwicklungspakete installiert werden müssen, bevor man mit der Kompilierung von Ruby beginnt.

Der Rest meines Textes hier enthält nichts Neues und es wird empfohlen, ihn wegzulassen, wenn Sie sich bei der Anpassung Ihrer Ausführungsumgebung auf UNIX-ähnlichen Betriebssystemen wohl fühlen.Das Folgende ist eine Kombination aus einer kurzen Einführung in einige Grundlagen und Schritt-für-Schritt-Anleitungen.

------Der-Anfang-des-HOW-TO-----------

Wenn man ein Programm, sagen wir, irb, von einer Konsole aus ausführen möchte, wird die Datei mit dem Namen irb in den Ordnern in einer Reihenfolge durchsucht, die durch eine Umgebungsvariable namens PATH beschrieben wird.Sie können den Wert von PATH sehen, indem Sie in eine Bash-Shell Folgendes eingeben (und die Eingabetaste drücken):

echo $PATH

Wenn zum Beispiel zwei Versionen von irb im System vorhanden sind, eine vom „offiziellen“ Paketverwaltungssystem, sagen wir yum oder apt-get, nach /usr/bin/irb installiert und die andere vom Benutzer mit dem Namen scoobydoo und befindet sich in /home/scoobydoo/ourcompiledruby/bin, dann stellt sich die Frage, welcher der beiden irb-s ausgeführt wird.

Wenn man an die /home/scoobydoo/.bashrc schreibt eine Zeile wie:

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

und startet die Bash -Shell neu, indem Sie das Terminalfenster schließen und eine neue öffnen. Wenn Sie IRB in die Konsole eingeben, wird das/home/scoobydoo/ourcompiledruby/bin/iRB ausgeführt.Wenn einer schrieb

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

auf die /home/scoobydoo/.bashrc, dann werden die/usr/bin/iRB ausgeführt.

In der Praxis will man schreiben

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

denn dadurch werden alle Werte vorangestellt, die der PATH vor dieser Zuweisung in /home/scoobydoo/ourcompiledruby/bin hatte.Andernfalls wird es Probleme geben, da nicht alle gängigen Tools in /usr/bin liegen und man wahrscheinlich mehrere benutzerdefinierte Anwendungen im Einsatz haben möchte.

Die gleiche Logik gilt für Bibliotheken, mit der Ausnahme, dass der Name der Umgebungsvariablen LD_LIBRARY_PATH lautet

Die Verwendung von LD_LIBRARY_PATH und PATH ermöglicht es normalen Benutzern, die keinen Root-Zugriff haben oder mit nicht besonders vertrauenswürdiger Software experimentieren möchten, diese zu erstellen und zu verwenden, ohne Root-Rechte zu benötigen.

Der Rest dieser Mini-Anleitung geht davon aus, dass wir unsere eigene Ruby-Version erstellen und unsere eigene Version davon verwenden, fast unabhängig davon, was von der offiziellen Paketverwaltungssoftware der Distribution auf dem System installiert wird.

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

Zunächst erstellt man ein paar Ordner und stellt die Umgebungsvariablen ein, damit die Ordner „nützlich“ sind.

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

Man fügt den folgenden 2 Zeilen zum /home/scoobydoo/.bashrc hinzu

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

Starten Sie die Bash-Shell neu, indem Sie das aktuelle Terminalfenster schließen und ein neues öffnen oder indem Sie Folgendes eingeben

bash

in der Befehlszeile des aktuell geöffneten Fensters.Die Änderungen an den /home/scoobydoo/.bashrc haben keine Auswirkungen auf die Terminal -Fenster/-sitzungen/Sitzungen /.bashrc wird zu Beginn einer Sitzung automatisch ausgeführt, auch wenn man sich über SSH anmeldet.

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

Nun stellt man sicher, dass die zlib-Entwicklungspakete auf dem System verfügbar sind.Bis April 2011 habe ich die Details noch nicht geklärt, aber

apt-get install zlibc zlib1g-dev zlib1g

scheint auf einem Debian-System ausreichend zu sein.Die Idee ist, dass sowohl die Bibliotheksdatei als auch die Header-Dateien im „offiziellen“ Suchpfad des Systems verfügbar sind.Normalerweise platzieren apt-get und ähnliche die Header-Dateien in /usr/include und die Bibliotheksdateien in /usr/lib

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

Laden Sie die Quelldatei tar.gz herunter und entpacken Sie sie http://www.ruby-lang.org

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

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

Wenn ein Konsolenbefehl wie

which ruby

druckt auf der Konsole

/home/scoobydoo/ourcompiledruby/bin/ruby

dann ist die neu kompilierte Version diejenige, die auf dem Befehl ausgeführt wird

ruby --help

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

Die restlichen Programme, gem, irb usw., können mithilfe von Befehlen wie den folgenden ordnungsgemäß ausgeführt werden:

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

Es sollte nicht so sein, aber bis April 2011 habe ich keine elegantere Möglichkeit gefunden, es zu machen.Wenn die

ruby `which gem` install rake

gibt erneut den Fehler „zlib fehlt“ aus, dann sollte man einfach versuchen herauszufinden, wie man die zlib-Include-Dateien und die Bibliothek für das Ruby-Konfigurationsskript verfügbar macht und neu kompiliert.(Leider kann ich derzeit keine bessere Lösung anbieten.)

Möglicherweise ist eine schmutzige Lösung, um die folgenden Zeilen zum /home/scoobydoo/.bashrc hinzuzufügen

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

Eigentlich verwende ich normalerweise

alias irb="`which ruby` -KU "

Der Edelstein sollte jedoch ausgeführt werden, ohne dem Ruby die Argumente „-KU“ zu geben, da es sonst zu Fehlern kommt.

------Das-Ende-des-HOW-TO----------

Eine Neuinstallation von Ruby hat dieses Problem behoben.Es ist nicht das, was ich wollte;Ich wollte wissen, warum ich das Problem bekomme, aber es ist alles geklärt.

Es wird am häufigsten angezeigt, wenn Ihr Download fehlgeschlagen ist – d. h.Sie haben ein beschädigtes Gem, aufgrund eines Netzwerk-Timeouts, eines fehlerhaften manuellen Downloads oder was auch immer.Versuchen Sie es einfach noch einmal oder laden Sie die Edelsteine ​​manuell herunter und zeigen Sie darauf gem in den Akten.

Wenn gem update --system funktioniert nicht und umbenennen ruby/bin/zlib1.dll Zu zlib.dll Es hilft nicht, Folgendes zu versuchen:

Datei öffnen RUBY_DIR\lib\ruby\site_ruby\1.8\rubygems.rb

Und ersetzen existierte def self.gunzip(data) dadurch:

  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

Wie wäre es dann mit einer CD in rubysrc/ext/zlib? ruby extendconf.rb, Dann make, make install.

Danach installieren Sie Ruby neu.

Ich habe dies unter Ubuntu 10.04 gemacht und war erfolgreich.

Versuchen Sie es mit einer Aktualisierung ZLib bevor Sie etwas anderes tun.Ich hatte ein ähnliches Problem unter OS X und beim Update Komprimieren::Zlib (eine Perl-Schnittstelle zu ZLib) hat es behoben - ich denke also, eine alte Version von ZLib (ist jetzt 1.2.3) könnte Ihr Problem sein ...

Installieren Sie Pure Ruby Zlib, wenn alles andere fehlschlägt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top