无法安装ruby gems-zlib错误

无法安装ruby gems-zlib错误,ruby,gem,Ruby,Gem,我正在尝试安装一些Ruby Gems,以便在收到twitter消息时使用Ruby通知我。然而,在执行gem更新--system之后,现在每次尝试执行gem安装时,我都会收到一个zlib错误。下面是我在尝试安装ruby gems时得到的控制台输出。(以及来自gem环境的输出) Ruby的重新安装解决了这个问题。这不是我想要的;我想知道为什么我会遇到这个问题,但一切都解决了 我今晚也刚开始买这个。谷歌搜索发现了一大堆没有结果的建议 gem update --system 还有一些jamis中的粘贴

我正在尝试安装一些Ruby Gems,以便在收到twitter消息时使用Ruby通知我。然而,在执行
gem更新--system
之后,现在每次尝试执行
gem安装时,我都会收到一个zlib错误。下面是我在尝试安装ruby gems时得到的控制台输出。(以及来自
gem环境的输出)


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

我今晚也刚开始买这个。谷歌搜索发现了一大堆没有结果的建议

gem update --system
还有一些jamis中的粘贴代码,它应该替换package.rb中的函数,但它应该替换的原始代码却找不到


重新安装rubygems没有帮助。我现在正在重新安装ruby,它已经修复了。不过很痛苦。

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

在执行任何其他操作之前尝试更新。我在OS X上遇到了一个类似的问题,并且更新(ZLib的Perl接口)解决了这个问题-所以我认为旧版本(现在是1.2.3)可能就是问题所在…

找到了!我在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才能使用

还有塔达!鲁比杰姆斯又开始工作了


希望这有帮助。

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

如果
gem update--system
不起作用,请将
ruby/bin/zlib1.dll
重命名为
zlib.dll
尝试:

打开文件
RUBY\u DIR\lib\RUBY\site\u RUBY\1.8\rubygems.rb

并将现有的
def self.gunzip(数据)
替换为:

  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

首先,我要感谢为缺失的zlib问题提出解决方案的人。(不是我。:-)

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

本文的其余部分不包含任何新内容,如果您对在类UNIX操作系统上自定义执行环境感到满意,建议您省略它。以下是一些基础知识的简要介绍和分步说明的组合

------如何开始-------------------------

如果要从控制台执行程序(比如irb),那么将按照名为PATH的环境变量所描述的顺序从文件夹中搜索名为irb的文件。通过键入bash shell(并按Enter键),可以查看路径的值:

例如,如果系统中有两个版本的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"
并通过关闭终端窗口并打开一个新窗口,然后在控制台中键入irb,重新启动bash shell /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"
因为这会将路径在此分配之前拥有的所有值前置到/home/scoobydoo/ourcompiledruby/bin。否则就会出现问题,因为并非所有通用工具都驻留在/usr/bin中,而且可能需要使用多个定制的应用程序

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

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

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

(一)=============================

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

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

export PATH="/home/scoobydoo/ourcompiledruby/bin:$PATH"
export GEM_HOME="/home/scoobydoo/lib/our_gems"
alias gem="`which ruby` `which gem` "
alias irb="`which ruby` `which irb` "
通过关闭当前终端窗口并打开新窗口或键入

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

(二)=============================

现在可以确保系统上有zlib开发包。截至2011年4月,我还没有整理出它的细节,但是export PATH="/home/scoobydoo/ourcompiledruby/bin:$PATH" export GEM_HOME="/home/scoobydoo/lib/our_gems"
bash
apt-get install zlibc zlib1g-dev zlib1g
./configure --prefix=/home/scoobydoo/ourcompiledruby
make
make install
which ruby
/home/scoobydoo/ourcompiledruby/bin/ruby
ruby --help
ruby `which gem` install rake
ruby `which irb`
ruby `which gem` install rake
alias gem="`which ruby` `which gem` "
alias irb="`which ruby` `which irb` "
alias irb="`which ruby` -KU "