无法安装ruby gems-zlib错误

时间:2020-03-05 18:43:21  来源:igfitidea点击:

我正在尝试安装一些Ruby Gems,以便在收到Twitter消息时可以使用Ruby通知我。但是,在执行" gem update --system"之后,每次尝试执行" gem install"操作时,我都会遇到zlib错误。以下是尝试安装ruby gem时获得的控制台输出。 (以及来自"宝石环境"的输出)。

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/

解决方案

回答

重新安装Ruby可以解决此问题。这不是我想要的;我想知道为什么会遇到这个问题,但是已经解决了。

回答

今晚我也刚开始得到这个。 Googling提出了一些未取得成果的建议

gem update --system

并且从jamis中粘贴了一些代码,该代码应该替换package.rb中的函数,但是找不到要替换的原始代码。

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

回答

当下载失败时,它通常会显示-即由于网络超时,错误的手动下载或者其他原因,宝石已损坏。请再试一次,或者手动下载gems,然后将gem指向文件。

回答

在执行任何其他操作之前,请尝试更新ZLib。我在OS X上遇到了类似的问题,并且更新了Compress :: Zlib(ZLib的Perl接口)可以解决该问题,所以我认为ZLib的旧版本(现在为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才能使用。

和田田! Rubygems再次工作。

希望这可以帮助。

回答

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

回答

如果gem update --system不起作用并且将ruby / bin / zlib1.dll重命名为zlib.dll不能帮助尝试:

打开文件RUBY_DIR \ lib \ ruby​​ \ site_ruby \ 1.8 \ ruby​​gems.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