2008-08-26 20 views
9

Estoy tratando de instalar algunas gemas de Ruby para que pueda usar Ruby para notificarme cuando recibo mensajes de Twitter. Sin embargo, después de hacer un gem update --system, ahora recibo un error zlib cada vez que intento hacer un gem install de cualquier cosa. a continuación se muestra la salida de la consola que recibo cuando intento instalar ruby ​​gems. (junto con la salida de gem environment).no se puede instalar ruby ​​gems - zlib error

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/ 

Respuesta

3

Acabo de empezar a recibir esta noche también. Googlear aparecido un montón de sugerencias que no da resultados

gem update --system 

y un poco de pasta en el código de Jamis que se supone para sustituir una función en package.rb pero el original se supone que debe reemplazar está por ningún lado encontró.

La reinstalación de rubygems no ayudó. Estoy reinstalando ruby ​​ahora mismo ... y está arreglado. Dolor sin embargo.

1

Una reinstalación de Ruby resolvió este problema. No es lo que yo quería; Quería saber por qué estaba teniendo el problema, pero todo está solucionado.

+0

En mi caso, creo que el problema era que yo estaba de alternar entre los rieles 2.1.0 y 2.1.2 y creo que la dependencia instala resultó en cosas que terminan fuera de control – srboisvert

+0

Freeze carriles en sus aplicaciones, que forma en que no necesita una gema separada para eso y no tendrá conflictos. – nitecoder

1

Aparece más a menudo cuando falla la descarga, es decir, tiene una gema corrupta, debido al tiempo de espera de la red, la descarga manual defectuosa o lo que sea. Inténtelo de nuevo o descargue las gemas manualmente y marque gem en los archivos.

0

Intente actualizar ZLib antes de hacer cualquier otra cosa. Tenía un problema similar en OS X y actualizar Compress::Zlib (una interfaz de Perl para ZLib) curó - así que creo una versión antigua de ZLib (ahora 1.2.3) puede ser donde reside su problema ...

5

Encontrado ¡eso! Tuve el mismo problema en Windows (apareció de repente sin que yo haga una actualización, pero lo que sea):

Tiene algo que ver con varias versiones conflictivas de zlib (creo).

En ruby ​​/ lib/ruby ​​/ 1.8/i386-msvcrt, asegúrese de que existe un archivo zlib.so. En mi caso, ya estaba allí. De lo contrario, puede intentar instalar ruby-zlib.

Luego vaya a ruby ​​/ lib/ruby ​​/ site_ruby/1.8./I386-msvcrt y elimine el archivo zlib.so allí.

En ruby ​​/ bin, debería haber un zlib1.dll. Por alguna razón, mi versión de Ruby no usó este dll. Descargué la versión más reciente (1.2.3) y la instalé allí. Tuve que cambiarle el nombre a zlib.dll para que se utilizara.

Y tada! Rubygems funcionó de nuevo.

Espero que esto ayude.

+0

Para mí, todo lo que tenía que hacer era cambiar el nombre 'ruby/bin/zlib1.dll' a' zlib.dll'. Arregló todo. – Andrew

+0

¿Cómo puedo instalar ruby-zlib en Windows cuando las gemas no funcionan? – Automatico

0

instalar zlib rubí puro si todo lo demás falla

1

si gem update --system no las obras y cambiar el nombre ruby/bin/zlib1.dll-zlib.dll no ayuda a tratar:

Abrir el archivo RUBY_DIR\lib\ruby\site_ruby\1.8\rubygems.rb

y reemplazar existido def self.gunzip(data) por esto:

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 
4

En primer lugar, agradezco a la persona, que surgió ingenio h la solución al problema zlib faltante. (No fui yo. :-)

Lamentablemente, perdí el enlace a la publicación original, pero la esencia de la solución en Linux es compilar el Ruby, mientras que los archivos de encabezado zlib están disponibles para el script de configuración de Ruby. En Debian significa que los paquetes de desarrollo zlib deben instalarse antes de que uno comience a compilar el Ruby.

El resto del texto aquí no contiene nada nuevo y se recomienda omitirlo, si se siente cómodo personalizando su entorno de ejecución en sistemas operativos tipo UNIX. La siguiente es una combinación de una breve introducción a algunos conceptos básicos e instrucciones paso a paso.

------ El-Start-of-the-HOW-TO -------------------------

Si uno quiere ejecutar un programa, digamos, irb, desde una consola, entonces el archivo llamado irb se busca desde las carpetas en un orden que se describe mediante una variable de entorno llamada PATH. Es posible ver el valor de la PATH escribiendo a una cáscara del golpe (y pulsando la tecla Enter):

echo $PATH 

Por ejemplo, si hay 2 versiones de IRB en el sistema, uno instalados por el "oficial" sistema de administración de paquetes, digamos, yum o apt-get, a/usr/bin/irb y el otro que es compilado por el usuario llamado scoobydoo y reside en/home/scoobydoo/ourcompiledruby/bin entonces surge la pregunta, cuál de los dos irb-s se ejecuta.

Si uno escribe a la /home/scoobydoo/.bashrc una línea como:

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

y reinicia el shell bash mediante el cierre de la ventana de terminal y abrir una nueva, entonces tecleando IRB para la consola, el /home/scoobydoo/ourcompiledruby/bin/irb se ejecuta. Si uno escribió

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

a la /home/scoobydoo/.bashrc , entonces el directorio/usr/bin/IRB conseguiría ejecutado.

En la práctica se quiere escribir

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

porque esto antepone todos los valores que el camino tenía antes de esta asignación al directorio/home/scoobydoo/ourcompiledruby/bin. De lo contrario, habrá problemas, porque no todas las herramientas comunes residen en/usr/bin y es probable que desee tener varias aplicaciones personalizadas en uso.

La misma lógica se aplica a las bibliotecas, excepto que el nombre de la variable de entorno LD_LIBRARY_PATH es

El uso de la LD_LIBRARY_PATH y PATH permite que los usuarios normales, que no tienen acceso a la raíz o que quieren experimentar con no- ese software de confianza, para construirlos y usarlos sin necesidad de privilegios de administrador.

El resto de este mini-cómo-hacerlo supone que construiremos nuestra propia versión de ruby ​​y usaremos nuestra propia versión de la misma, independientemente de lo que esté instalado en el sistema por el software oficial de administración de paquetes de la distribución.

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

En primer lugar, se crea un par de carpetas y configurar el entorno variables, para que las carpetas sean "útiles".

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

Uno añade las siguientes 2 líneas a la /home/scoobydoo/.bashrc

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

Reiniciar la cáscara del golpe al cerrar la ventana de terminal actual y abrir una nueva o escribiendo

bash 

en la línea de comando de la ventana actualmente abierta. Los cambios en /home/scoobydoo/.bashrc no tienen ningún efecto en las ventanas/sesiones de terminal que se iniciaron antes del guardado de la versión modificada de /home/scoobydoo/.bashrc La idea es que el/home /scoobydoo/.bashrc se ejecuta automáticamente al inicio de una sesión, incluso si uno inicia sesión en ssh.

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

Ahora se asegura que los paquetes de desarrollo zlib están disponibles en el sistema. A partir de abril de 2011 no he ordenado los detalles, pero

apt-get install zlibc zlib1g-dev zlib1g 

parece ser suficiente en un sistema Debian. La idea es que tanto el archivo de la biblioteca como el encabezado estén disponibles en la ruta de búsqueda "oficial" del sistema. Por lo general, apt-get y lugar por igual los archivos de cabecera en el directorio/usr/include y archivos de la biblioteca a la/usr/lib

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

Descargue y descomprima la fuente tar.gz de la http://www.ruby-lang.org

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

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

Si un comando de consola como

which ruby 

imprime en la consola

/home/scoobydoo/ourcompiledruby/bin/ruby 

entonces la nueva versión compilada es el que se ha de ejecutar el comando

ruby --help 

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

El resto de los programas, gema, IRB , etc., puedan ejecutarse adecuadamente mediante el uso de comandos como:

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

no debería ser así, pero a partir de abril 2011 no han descubierto ningún formas más elegantes de hacerlo. Si el

ruby `which gem` install rake 

da zlib perdido error de nuevo, entonces uno simplemente debe tratar de averiguar, cómo hacer que el zlib incluir archivos y biblioteca disponibles para el Rubí configurar guión y recompilar. (Lo siento, no tengo una solución mejor que ofrecer.)

puede ser una solución sucia podría ser añadir las siguientes líneas al /home/scoobydoo/.bashrc

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

realidad , que suelen utilizar

alias irb="`which ruby` -KU " 

pero la gema debe ser ejecutado sin dar el rubí los argumentos "ku", porque de lo contrario no habrá errores.

------ El extremo del-HOW-TO ------------------------

+0

Gracias por el howto, lo tengo trabajando en mi sistema ubuntu simplemente ejecutando 'apt-get install zlibc zlib1g-dev zlib1g libxml2-dev' – iain

1

Cómo acerca de cd en rubysrc/ext/zlib, luego ruby extendconf.rb, luego make, make install.

Después de hacer eso, vuelva a instalar ruby.

Lo hice en Ubuntu 10.04 y fue un éxito.

+0

Muchas gracias, Nat! – user3931649