Вопрос

Я пытаюсь установить Ruby Gems, чтобы использовать Ruby для уведомления меня, когда я получаю сообщения в Твиттере.Однако после выполнения gem update --system, теперь я получаю ошибку zlib каждый раз, когда пытаюсь выполнить gem install чего либо.ниже приведен вывод консоли, который я получаю при попытке установить 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, но оригинала, который он должен заменить, нигде не найти.

Переустановка рубигемса не помогла.Я переустанавливаю 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, чтобы его можно было использовать.

И тада!Рубигемы снова заработали.

Надеюсь это поможет.

Во-первых, я благодарю человека, который нашел решение проблемы с отсутствующим zlib.(Это был не я.:-)

К сожалению, я потерял ссылку на исходную публикацию, но суть решения в Linux состоит в том, чтобы скомпилировать Ruby, пока файлы заголовков zlib доступны для сценария настройки Ruby.В Debian это означает, что пакеты разработки zlib должны быть установлены до начала компиляции Ruby.

Остальная часть моего текста здесь не содержит ничего нового, и рекомендуется опустить ее, если вы чувствуете себя комфортно при настройке своей среды выполнения в UNIX-подобных операционных системах.Ниже приводится сочетание краткого введения в некоторые основы и пошаговых инструкций.

------Начало-КАК-------------------------

Если кто-то хочет выполнить программу, скажем, irb, из консоли, то файл с именем irb ищется в папках в порядке, который описан переменной среды PATH.Значение PATH можно увидеть, набрав в оболочке bash (и нажав клавишу Enter):

echo $PATH

Например, если в системе есть 2 версии irb: одна установлена ​​«официальной» системой управления пакетами, скажем, yum или apt-get, в /usr/bin/irb, а другая скомпилирована пользователь с именем scoobydoo и находится в /home/scoobydoo/ourcompiledruby/bin, тогда возникает вопрос, какой из двух irb-ов будет выполнен.

Если кто -то пишет в/home/scoobydoo/.bashrc, такая линия, как:

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

и перезагружает оболочку Bash, закрыв окно терминала и открыв новый, а затем набрав 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

Одна добавляет следующие 2 строки к /HOME/scoobydoo/.bashrc

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

Перезапустите оболочку bash, закрыв текущее окно терминала и открыв новое или набрав

bash

в командной строке текущего открытого окна.Изменения в /хоме/scoobydoo/.bashrc не оказывают никакого влияния на терминальные окна/сеансы, которые были начаты до сохранения модифицированной версии /home/scoobydoo/.bashrc. Идея заключается в том, что/home/scoobydoo /.bashrc выполняется автоматически в начале сеанса, даже если кто -то входит в систему над SSH.

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

Теперь нужно убедиться, что пакеты разработки zlib доступны в системе.По состоянию на апрель 2011 года я еще не разобрался в деталях, но

apt-get install zlibc zlib1g-dev zlib1g

кажется достаточным в системе Debian.Идея состоит в том, что как файл библиотеки, так и файлы заголовков доступны в «официальном» пути поиска системы.Обычно apt-get и подобные ему файлы заголовков помещаются в /usr/include, а файлы библиотеки — в /usr/lib.

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

Загрузите и распакуйте исходный код tar.gz из архива http://www.ruby-lang.org

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

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

Если консольная команда типа

which ruby

выводит на консоль

/home/scoobydoo/ourcompiledruby/bin/ruby

тогда только что скомпилированная версия будет выполнена по команде

ruby --help

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

Остальные программы, драгоценные камни, irb и т. д., можно правильно выполнить с помощью таких команд, как:

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

Так не должно быть, но по состоянию на апрель 2011 года я не придумал более элегантных способов сделать это.Если

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 "

но гем должен выполняться без передачи рубину аргументов "-KU", иначе возникнут ошибки.

------Конец-КАК------------------------

Переустановка Ruby решила эту проблему.Это не то, чего я хотел;Я хотел знать, почему у меня возникла эта проблема, но со всем разобрались.

Чаще всего оно появляется, когда загрузка не удалась, т.е.у вас поврежден драгоценный камень из-за тайм-аута сети, неправильной загрузки вручную или чего-то еще.Просто попробуйте еще раз или загрузите драгоценные камни вручную и укажите 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

Как насчет того, чтобы перейти в Rubysrc/ext/zlib? ruby extendconf.rb, затем make, make install.

После этого переустановите Ruby.

Я сделал это на Ubuntu 10.04 и добился успеха.

Попробуйте обновить ZLib прежде чем сделать что-нибудь еще.У меня была аналогичная проблема в OS X и обновлении Сжать::Zlib (интерфейс Perl для ZLib) вылечил это - так что я думаю, что старая версия ZLib (теперь это 1.2.3), возможно, именно здесь кроется ваша проблема...

установите чистый Ruby Zlib, если ничего не помогает

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top