无法安装ruby gems-zlib错误
我正在尝试安装一些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 \ 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