Domanda

Sto cercando di installare alcune Ruby Gems in modo da poter usare Ruby per avvisarmi quando ricevo messaggi su Twitter.Tuttavia, dopo aver fatto a gem update --system, ora ricevo un errore zlib ogni volta che provo a eseguire un'operazione gem install di tutto.di seguito è riportato l'output della console che ottengo quando provo a installare Ruby Gems.(insieme all'output di 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/
È stato utile?

Soluzione

Anche io ho iniziato a riceverlo stasera.Cercando su Google sono stati trovati una serie di suggerimenti che non hanno prodotto risultati

gem update --system

e del codice incollato da jamis che dovrebbe sostituire una funzione in package.rb ma l'originale che dovrebbe sostituire non si trova da nessuna parte.

La reinstallazione di rubygems non ha aiutato.Sto reinstallando Ruby proprio adesso... ed è stato risolto.Dolore però.

Altri suggerimenti

Trovato!Ho avuto lo stesso problema su Windows (è apparso all'improvviso senza che io facessi un aggiornamento, ma qualunque cosa):

Ha qualcosa a che fare con più versioni zlib in conflitto (credo).

In ruby/lib/ruby/1.8/i386-msvcrt, assicurati che esista un file zlib.so.Nel mio caso era già lì.In caso contrario, puoi provare a installare ruby-zlib.

Quindi vai su ruby/lib/ruby/site_ruby/1.8./i386-msvcrt ed elimina il file zlib.so lì.

In ruby/bin dovrebbe esserci zlib1.dll.Per qualche ragione la mia versione di Ruby non utilizzava questa DLL.Ho scaricato la versione più recente (1.2.3) e l'ho installata lì.Ho dovuto rinominarlo in zlib.dll per poterlo utilizzare.

E tada!Rubygems ha funzionato di nuovo.

Spero che questo ti aiuti.

Innanzitutto ringrazio la persona che ha trovato la soluzione al problema della mancanza di zlib.(Non sono stato io.:-)

Sfortunatamente ho perso il collegamento al messaggio originale, ma l'essenza della soluzione su Linux è compilare Ruby mentre i file header zlib sono disponibili per lo script di configurazione di Ruby.Su Debian significa che i pacchetti di sviluppo zlib devono essere installati prima di iniziare a compilare Ruby.

Il resto del mio testo qui non contiene nulla di nuovo ed è consigliabile ometterlo, se ti senti a tuo agio nel personalizzare il tuo ambiente di esecuzione su sistemi operativi simili a UNIX.Quella che segue è una combinazione di una breve introduzione ad alcune nozioni di base e istruzioni passo passo.

------L'inizio-del-COME-------------------------

Se si vuole eseguire un programma, diciamo irb, da una console, allora il file chiamato irb viene cercato nelle cartelle in un ordine descritto da una variabile d'ambiente chiamata PATH.È possibile vedere il valore del PATH digitando in una shell bash (e premendo il tasto Invio):

echo $PATH

Ad esempio, se ci sono 2 versioni di irb nel sistema, una installata dal sistema di gestione dei pacchetti "ufficiale", diciamo, yum o apt-get, in /usr/bin/irb e l'altra compilata da utente denominato scoobydoo e risiede in /home/scoobydoo/ourcompiledruby/bin, allora sorge la domanda: quale dei due irb-s verrà eseguito.

Se uno scrive a /home/scoobydoo/.bashrc una linea come:

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

e riavvia la shell bash chiudendo la finestra del terminale e aprendo una nuova, quindi digitando IRB alla console, viene eseguita/home/Scoobydoo/ourcompiledRuby/bin/IRB.Se uno scrivesse

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

Per /home/scoobydoo/.bashrc, quindi/usr/bin/IRB verrebbe eseguito.

In pratica si vuole scrivere

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

perché questo antepone tutti i valori che il PATH aveva prima di questa assegnazione a /home/scoobydoo/ourcompiledruby/bin.Altrimenti ci saranno problemi, perché non tutti gli strumenti comuni risiedono in /usr/bin e probabilmente si vorrà avere più applicazioni personalizzate in uso.

La stessa logica si applica alle librerie, tranne per il fatto che il nome della variabile d'ambiente è LD_LIBRARY_PATH

L'uso di LD_LIBRARY_PATH e PATH consente agli utenti ordinari, che non hanno accesso root o che desiderano sperimentare software non affidabile, di crearli e utilizzarli senza bisogno di privilegi di root.

Il resto di questo mini-how-to presuppone che costruiremo la nostra versione di Ruby e la utilizzeremo quasi indipendentemente da ciò che è installato sul sistema dal software di gestione dei pacchetti ufficiale della distribuzione.

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

Per prima cosa si creano alcune cartelle e si impostano le variabili d'ambiente, in modo che le cartelle siano "utili".

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

Uno aggiunge le seguenti 2 righe a /home/scoobydoo/.bashrc

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

Riavvia la shell bash chiudendo la finestra del terminale corrente e aprendone una nuova o digitando

bash

sulla riga di comando della finestra attualmente aperta.Le modifiche a /home/scoobydoo/.bashrc non hanno alcun effetto sulle finestre/sessioni terminali che sono state avviate prima del salvataggio della versione modificata di /home/scoobydoo/.bashrc l'idea è che/home/scoobydoo /.Bashrc viene eseguito automaticamente all'inizio di una sessione, anche se si registra su SSH.

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

Ora ci si assicura che i pacchetti di sviluppo zlib siano disponibili sul sistema.Ad aprile 2011 non ne ho ancora chiarito i dettagli, ma

apt-get install zlibc zlib1g-dev zlib1g

sembra essere sufficiente su un sistema Debian.L'idea è che sia il file di libreria che i file di intestazione siano disponibili nel percorso di ricerca "ufficiale" del sistema.Di solito apt-get e simili inseriscono i file di intestazione in /usr/include e i file di libreria in /usr/lib

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

Scarica e decomprimi il sorgente tar.gz dal file http://www.ruby-lang.org

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

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

Se un comando da console piace

which ruby

stampa sulla console

/home/scoobydoo/ourcompiledruby/bin/ruby

quindi la versione appena compilata è quella che viene eseguita sul comando

ruby --help

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

Il resto dei programmi, gem, irb, ecc., possono essere eseguiti correttamente utilizzando comandi come:

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

Non dovrebbe essere così, ma ad aprile 2011 non ho trovato modi più eleganti per farlo.Se la

ruby `which gem` install rake

dà di nuovo l'errore mancante di zlib, quindi si dovrebbe semplicemente provare a capire come rendere zlib include file e libreria disponibili per lo script di configurazione di Ruby e ricompilare.(Mi spiace, al momento non ho una soluzione migliore da offrire.)

Potrebbe essere una soluzione sporca potrebbe essere quella di aggiungere le seguenti righe a /home/scoobydoo/.bashrc

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

In realtà, di solito lo uso

alias irb="`which ruby` -KU "

ma la gemma dovrebbe essere eseguita senza dare al rubino gli argomenti "-KU", perché altrimenti si verificheranno errori.

------La-fine-del-COME-----------------------

Una reinstallazione di Ruby ha risolto questo problema.Non è quello che volevo;Volevo sapere il motivo del problema, ma è tutto risolto.

Molto spesso viene visualizzato quando il download non è riuscito, ad es.hai un gem corrotto, a causa del timeout della rete, del download manuale difettoso o altro.Riprova o scarica le gemme manualmente e punta gem ai file.

Se gem update --system non funziona e rinominalo ruby/bin/zlib1.dll A zlib.dll non aiuta provare:

Apri il file RUBY_DIR\lib\ruby\site_ruby\1.8\rubygems.rb

E la sostituzione esisteva def self.gunzip(data) da questo:

  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

Che ne dici di cd in rubysrc/ext/zlib, allora ruby extendconf.rb, Poi make, make install.

Dopo averlo fatto, reinstalla Ruby.

L'ho fatto su Ubuntu 10.04 e ho avuto successo.

Prova ad aggiornare ZLib prima di fare qualsiasi altra cosa.Ho avuto un problema simile su OS X e sull'aggiornamento Comprimi::Zlib (un'interfaccia Perl per ZLib) lo ha risolto, quindi penso che una vecchia versione di ZLib (è ora 1.2.3) potrebbe essere dove risiede il tuo problema...

installa pure Ruby zlib se tutto il resto fallisce

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top