Pregunta

Estoy intentando instalar algunas Ruby Gems para poder usar Ruby para notificarme cuando recibo mensajes de Twitter.Sin embargo, después de hacer un gem update --system, ahora aparece un error zlib cada vez que intento hacer un gem install de nada.A continuación se muestra el resultado de la consola que obtengo cuando intento instalar Ruby Gems.(junto con la salida 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/
¿Fue útil?

Solución

También comencé a recibir esto esta noche.Al buscar en Google aparecieron un montón de sugerencias que no arrojaron resultados.

gem update --system

y algo de código pegado de jamis que se supone que reemplaza una función en package.rb pero el original que se supone que reemplaza no se encuentra por ninguna parte.

Reinstalar Rubygems no ayudó.Estoy reinstalando Ruby ahora mismo... y está arreglado.Aunque dolor.

Otros consejos

¡Lo encontré!Tuve el mismo problema en Windows (apareció de repente sin que yo hiciera una actualización, pero da igual):

Tiene algo que ver con múltiples versiones de zlib en conflicto (creo).

En ruby/lib/ruby/1.8/i386-msvcrt, asegúrese de que exista un archivo zlib.so.En mi caso ya estaba ahí.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 usaba esta dll.Descargué la versión más reciente (1.2.3) y la instalé allí.Tuve que cambiarle el nombre a zlib.dll para poder usarlo.

¡Y tada!Rubygems volvió a funcionar.

Espero que esto ayude.

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

Desafortunadamente, perdí el enlace a la publicación original, pero la esencia de la solución en Linux es compilar Ruby mientras 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 comenzar a compilar Ruby.

El resto de mi texto aquí no contiene nada nuevo y le recomendamos 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-inicio-del-CÓMO-------------------------

Si uno quiere ejecutar un programa, digamos irb, desde una consola, entonces el archivo llamado irb se busca en las carpetas en un orden descrito por una variable de entorno llamada PATH.Es posible ver el valor de PATH escribiendo en un shell bash (y presionando la tecla Enter):

echo $PATH

Por ejemplo, si hay 2 versiones de irb en el sistema, una instalada por el sistema de administración de paquetes "oficial", digamos, yum o apt-get, en /usr/bin/irb y la otra que es compilada 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 le escribe a /home/scoobydoo/.bashrc una línea como:

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

y reinicia el caparazón de la fiesta cerrando la ventana del terminal y abriendo una nueva, luego escribiendo IRB a la consola, el/home/scoobydoo/ourcompiledruby/bin/irb se ejecuta.si uno escribiera

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

al /home/scoobydoo/.bashrc, entonces el/usr/bin/irb se ejecutaría.

En la práctica uno quiere escribir

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

porque esto antepone todos los valores que tenía la RUTA antes de esta asignación al /home/scoobydoo/ourcompiledruby/bin.De lo contrario, habrá problemas, porque no todas las herramientas comunes residen en /usr/bin y probablemente uno quiera tener múltiples aplicaciones personalizadas en uso.

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

El uso de LD_LIBRARY_PATH y PATH permite a los usuarios comunes, que no tienen acceso de root o que desean experimentar con software no tan confiable, compilarlos y usarlos sin necesidad de privilegios de root.

El resto de este mini-procedimiento supone que construiremos nuestra propia versión de Ruby y usaremos nuestra propia versión casi independientemente de lo que esté instalado en el sistema mediante el software de administración de paquetes oficial de la distribución.

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

Primero, se crean algunas carpetas y se configuran las variables de entorno, para que las carpetas sean "útiles".

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

Uno agrega las siguientes 2 líneas al /home/scoobydoo/.bashrc

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

Reinicie el shell bash cerrando la ventana de terminal actual y abriendo 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 terminales que se iniciaron antes del ahorro de la versión modificada del /home/scoobydoo/.bashrc es que el/home/scoobydoo /.BASHRC se ejecuta automáticamente al comienzo de una sesión, incluso si se inicia sesión en SSH.

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

Ahora uno se asegura de que los paquetes de desarrollo zlib estén disponibles en el sistema.Hasta abril de 2011 no he resuelto 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 los archivos de encabezado estén disponibles en la ruta de búsqueda "oficial" del sistema.Por lo general, apt-get e igualmente coloca los archivos de encabezado en /usr/include y los archivos de biblioteca en /usr/lib

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

Descargue y descomprima el código fuente tar.gz del 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 versión recién compilada es la que se ejecuta con el comando

ruby --help

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

El resto de programas, gem, irb, etc., se pueden ejecutar correctamente utilizando comandos como:

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

No debería ser así, pero hasta abril de 2011 no he descubierto ninguna forma más elegante de hacerlo.Si el

ruby `which gem` install rake

vuelve a mostrar el error de falta de zlib, entonces uno debería intentar descubrir cómo hacer que zlib incluya archivos y biblioteca disponibles para el script de configuración de Ruby y vuelva a compilar.(Lo siento, actualmente no tengo una solución mejor que ofrecer).

Puede ser una solución sucia podría ser agregar las siguientes líneas al /home/scoobydoo/.bashrc

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

En realidad, suelo utilizar

alias irb="`which ruby` -KU "

pero la gema debe ejecutarse sin darle al ruby ​​los argumentos "-KU", porque de lo contrario habrá errores.

------El-fin-del-CÓMO-------------------------

Una reinstalación de Ruby solucionó este problema.No es lo que quería;Quería saber por qué tenía ese problema, pero ya está todo solucionado.

La mayoría de las veces aparece cuando falla la descarga, es decir.tienes una gema corrupta debido a un tiempo de espera de la red, una descarga manual defectuosa o lo que sea.Inténtalo de nuevo o descarga las gemas manualmente y señala gem en los archivos.

si gem update --system no funciona y cambiar el nombre ruby/bin/zlib1.dll a zlib.dll No ayuda intentar:

Abrir documento RUBY_DIR\lib\ruby\site_ruby\1.8\rubygems.rb

Y reemplazar existió 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

¿Qué tal cd en rubysrc/ext/zlib, entonces? ruby extendconf.rb, entonces make, make install.

Después de hacer eso, reinstale Ruby.

Hice esto en ubuntu 10.04 y tuve éxito.

Intenta actualizar ZLib antes de hacer cualquier otra cosa.Tuve un problema similar en OS X y actualizando Comprimir::Zlib (una interfaz Perl para ZLib) lo solucionó, así que creo que una versión antigua de ZLib (ahora es 1.2.3) puede ser donde radica su problema...

instale Ruby zlib puro si todo lo demás falla

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top