que - no se puede instalar ruby gems-zlib error
ruby version (9)
Una reinstalación de Ruby solucionó este problema. No es lo que yo quería; Quería saber por qué estaba teniendo el problema, pero todo está solucionado.
Intento instalar Ruby Gems para poder usar Ruby para notificarme cuando recibo mensajes de Twitter. Sin embargo, después de hacer una gem update --system
, ahora recibo un error de zlib cada vez que intento hacer una 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 del 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/
Con mayor frecuencia aparece cuando falló 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 apunte la gem
a los archivos.
Intenta actualizar ZLib antes de hacer cualquier otra cosa. Tuve un problema similar en OS X y actualicé Compress :: Zlib (una interfaz Perl para ZLib), así que creo que una versión anterior de ZLib (ahora es 1.2.3) puede ser donde reside su problema ...
¡Lo encontré! 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 múltiples 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.
instale rubl zlib puro si falla todo lo demás
si la gem update --system
no funciona y renombra a ruby/bin/zlib1.dll
a zlib.dll
no ayuda a intentarlo:
Abra el archivo RUBY_DIR/lib/ruby/site_ruby/1.8/rubygems.rb
Y reemplace la def self.gunzip(data)
existente 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
En primer lugar, agradezco a la persona, que propuso 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 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 al personalizar 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-de-COMO-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 RUTA escribiendo a 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 gestión de paquetes "oficial", digamos, yum o apt-get, en / usr / bin / irb y la otra 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 escribe en /home/scoobydoo/.bashrc una línea como:
export PATH="/home/scoobydoo/ourcompiledruby/bin:/usr/bin"
y reinicia el shell bash cerrando la ventana de terminal y abriendo una nueva, luego escribiendo irb en la consola, se ejecuta / home / scoobydoo / ourcompiledruby / bin / irb. Si uno escribió
export PATH="/usr/bin:/home/scoobydoo/ourcompiledruby/bin"
a /home/scoobydoo/.bashrc, luego se ejecutará / usr / bin / irb.
En la práctica uno quiere escribir
export PATH="/home/scoobydoo/ourcompiledruby/bin:$PATH"
porque esto incluye todos los valores que PATH tenía antes de esta asignación a / 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 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 un software que no es de confianza, construirlos y usarlos sin necesidad de privilegios de administrador.
El resto de este mini-how-to asume que construiremos nuestra propia versión de ruby y usaremos nuestra propia versión, casi sin importar qué esté instalado en el sistema por el software oficial de administración de paquetes de la distribución.
1) ==========================
Primero, uno crea unas pocas carpetas y establece las variables de entorno, de modo que las carpetas sean "útiles".
mkdir /home/scoobydoo/ourcompiledruby
mkdir -p /home/scoobydoo/lib/our_gems
Uno agrega las siguientes 2 líneas a /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 de terminal que se iniciaron antes del guardado de la versión modificada de /home/scoobydoo/.bashrc. La idea es que / home / scoobydoo /.bashrc se ejecuta automáticamente al inicio de una sesión, incluso si uno inicia sesión en ssh.
2) ==========================
Ahora uno se asegura de que los paquetes de desarrollo de 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 similares ubican los archivos de encabezado en los archivos / usr / include y library en / usr / lib
3) ==========================
Descargue y descomprima la fuente tar.gz de 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 en el comando
ruby --help
5) ==========================
El resto de los programas, gema, irb, etc., se pueden ejecutar correctamente mediante comandos como:
ruby `which gem` install rake
ruby `which irb`
No debería ser así, pero a partir de abril de 2011 no he encontrado formas más elegantes de hacerlo. Si el
ruby `which gem` install rake
le da al zlib un error que falta nuevamente, entonces uno debería tratar de descubrir, cómo hacer que el zlib incluya archivos y la biblioteca disponible para el script de configuración de Ruby y recompilar. (Lo siento, actualmente no tengo una mejor solución para ofrecer).
Puede ser una solución sucia podría ser agregar las siguientes líneas a /home/scoobydoo/.bashrc
alias gem="`which ruby` `which gem` "
alias irb="`which ruby` `which irb` "
En realidad, suelo usar
alias irb="`which ruby` -KU "
pero la gema debe ejecutarse sin darle al rubí los argumentos "-KU", porque de lo contrario habrá errores.
------ The-end-of-the-HOW-TO ------------------------
¿Qué hay de cd en rubysrc / ext / zlib, luego ruby extendconf.rb
, luego make
, make install
.
Después de hacer eso, reinstala Ruby.
Hice esto en ubuntu 10.04 y fue exitoso.
Empecé a recibir esto esta noche también. Google encontró un montón de sugerencias que no arrojaron resultados
gem update --system
y algunos pegan en código de jamis que se supone que reemplaza una función en package.rb pero el original que supuestamente debe reemplazar no se encuentra en ninguna parte.
Reinstalar rubygems no ayudó. Estoy reinstalando ruby ahora mismo ... y está arreglado. Dolor sin embargo.