无法安装ruby gems – zlib错误

我正在尝试安装一些Ruby Gems,所以当我收到twitter消息时,我可以使用Ruby来通知我。 但是,在进行了gem update --system ,我现在每次尝试执行gem install时都会收到zlib错误。 下面是我在尝试安装ruby gems时获得的控制台输出。 (以及来自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/ 

我今晚也开始接受这个。 谷歌搜索出现了一堆没有提供结果的建议

 gem update --system 

还有一些来自jamis的代码粘贴,它应该替换package.rb中的一个函数,但它应该替换的原始版本无处可寻。

重新安装rubygems没有帮助。 我现在正在重新安装ruby ………并且它已修复。 虽然痛苦。

找到了! 我在Windows上遇到了同样的问题(它突然出现,没有我做更新,但无论如何):

它与多个冲突的zlib版本有关(我认为)。

在ruby / lib / ruby​​ / 1.8 / i386-msvcrt中,确保存在zlib.so文件。 就我而言,它已经存在了。 如果没有,您可以尝试安装ruby-zlib。

然后转到ruby / lib / ruby​​ / site_ruby / 1.8 ./i386-msvcrt并删除那里的zlib.so文件。

在ruby / bin中,应该有一个zlib1.dll。 出于某种原因,我的Ruby版本没有使用这个dll。 我下载了最新版本(1.2.3)并在那里安装了它。 我不得不将它重命名为zlib.dll才能使用它。

和田田! Rubygems再次工作。

希望这可以帮助。

首先,我感谢那位提出解决缺失的zlib问题的人。 (这不是我。:-)

遗憾的是我丢失了原始post的链接,但Linux上解决方案的本质是编译Ruby,而zlib头文件可用于Ruby配置脚本。 在Debian上,这意味着必须在开始编译Ruby之前安装zlib开发包。

这里的其余部分不包含任何新内容,如果您觉得在类UNIX操作系统中自定义执行环境,则鼓励省略它。 以下是对一些基础知识和逐步说明的简要介绍的组合。

——在启动的最-HOW-TO ————————-

如果想要从控制台执行程序,例如irb,则从文件夹中按名称由PATH环境变量描述的顺序搜索名为irb的文件。 通过键入bash shell(并按Enter键)可以看到PATH的值:

 echo $PATH 

例如,如果系统中有2个版本的irb,一个由“官方”软件包管理系统安装,比如yum或apt-get,安装到/ usr / bin / irb,另一个安装在用户名为scoobydoo并驻留在/ home / scoobydoo / ourcompiledruby / bin中然后出现问题,两个irb-s中的哪一个被执行。

如果一个人写入/home/scoobydoo/.bashrc一行如下:

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

并通过关闭终端窗口并打开一个新窗口重新启动bash shell,然后通过键入irb到控制台,/ home / scoobydoo / ourcompiledruby / bin / irb被执行。 如果有人写道

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

到/home/scoobydoo/.bashrc,然后/ usr / bin / irb将被执行。

在实践中,人们想写

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

因为这会将PATH在此分配之前具有的所有值置于/ home / scoobydoo / ourcompiledruby / bin之前。 否则会出现问题,因为并非所有常用工具都驻留在/ usr / bin中,并且可能希望使用多个自定义构建的应用程序。

除了环境变量的名称是LD_LIBRARY_PATH之外,相同的逻辑适用于库

LD_LIBRARY_PATH和PATH的使用允许没有root访问权限或想要试验不受信任的软件的普通用户构建它们并在不需要任何root权限的情况下使用它们。

这个迷你方法的其余部分假设我们将构建我们自己的ruby版本并使用我们自己的版本,几乎不管该发行版的官方软件包管理软件在系统上安装了什么。

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

首先,创建一些文件夹并设置环境变量,以便文件夹“有用”。

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

一个将以下两行添加到/home/scoobydoo/.bashrc

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

通过关闭当前终端窗口并打开一个新窗口或键入来重新启动bash shell

 bash 

在当前打开的窗口的命令行上。 对/home/scoobydoo/.bashrc的更改对保存/home/scoobydoo/.bashrc的修改版本之前启动的终端窗口/会话没有任何影响。想法是/ home / scoobydoo /.bashrc在会话开始时自动执行,即使通过ssh登录也是如此。

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

现在确保zlib开发包在系统上可用。 截至2011年4月,我还没有对其细节进行排序,但是

 apt-get install zlibc zlib1g-dev zlib1g 

在Debian系统上似乎已经足够了。 我们的想法是,库文件和头文件都可以在系统的“官方”搜索路径中使用。 通常apt-get和类似的将头文件放到/ usr / include和库文件到/ usr / lib

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

从http://www.ruby-lang.org下载并解压缩源tar.gz

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

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

如果是控制台命令就好

 which ruby 

打印到控制台

 /home/scoobydoo/ourcompiledruby/bin/ruby 

然后新编译的版本是在命令上执行的版本

 ruby --help 

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

其余的程序,gem,irb等可以使用以下命令正确执行:

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

它应该不是那样的,但截至2011年4月,我还没有想出更优雅的方式。 如果

 ruby `which gem` install rake 

再次给出zlib缺失错误,那么应该试着找出,如何使zlib包含文件和库可用于Ruby配置脚本并重新编译。 (对不起,目前我没有更好的解决方案。)

可能是一个脏的解决方案可能是将以下行添加到/home/scoobydoo/.bashrc

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

实际上,我经常使用

 alias irb="`which ruby` -KU " 

但是应该执行gem而不给ruby“-KU”args,因为否则会出错。

该端-最HOW-的TO —— ————————

重新安装Ruby将此问题排除在外。 这不是我想要的; 我想知道为什么我会遇到这个问题,但这一切都已经解决了。

它通常出现在您的下载失败时 – 即由于网络超时,手动下载错误或其他原因导致您的gem损坏。 再试一次,或手动下载gem并将gem指向文件。

如果gem update --system不能正常工作并将ruby/bin/zlib1.dll重命名为zlib.dll没有帮助尝试:

打开文件RUBY_DIR\lib\ruby\site_ruby\1.8\rubygems.rb

并通过以下方式替换现有的def self.gunzip(data)

  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 

如何cd到rubysrc / ext / zlib,然后ruby extendconf.rb ,然后makemake install

完成后,重新安装ruby。

我在ubuntu 10.04上做了这个并且成功了。

在执行任何其他操作之前,请尝试更新ZLib 。 我在OS X上有类似的问题,并且更新了Compress :: Zlib (一个到ZLib的Perl接口)来治愈它 – 所以我认为旧版本的ZLib (现在是1.2.3)可能是你的问题所在……

如果其他所有方法都失败,请安装纯ruby zlib