невозможно установить рубиновые самоцветы - ошибка zlib - PullRequest
9 голосов
/ 26 августа 2008

Я пытаюсь установить несколько 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/

Ответы [ 9 ]

5 голосов
/ 18 сентября 2009

Нашли это! У меня была такая же проблема на 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 для использования.

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

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

4 голосов
/ 27 апреля 2011

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

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

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

------ The-старт-оф-How-To -------------------------

Если кто-то хочет запустить программу, скажем, 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.

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

в командной строке текущего открытого окна. Изменения в /home/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) =============================

Остальные программы, gem, irb и т. Д., Могут быть правильно выполнены с помощью таких команд, как:

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

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

ruby `which gem` install rake

снова выдает ошибку отсутствия zlib, затем нужно просто попытаться выяснить, как сделать файлы и библиотеку zlib доступными для скрипта Ruby configure и перекомпилировать. (Извините, в настоящее время у меня нет лучшего решения, чтобы предложить.)

Может быть, грязным решением может быть добавление следующих строк в /home/scoobydoo/.bashrc

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

На самом деле, я обычно использую

alias irb="`which ruby` -KU "

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

* 1 089 * ------ The-конец-оф-хау к ------------------------
3 голосов
/ 21 сентября 2008

Я только начал получать это сегодня вечером. Гугл выдвинул кучу предложений, которые не дали результатов

gem update --system

и некоторая вставка в код из jamis, который должен заменить функцию в package.rb, но оригинал, который он должен заменить, нигде не найден.

Переустановка rubygems не помогла. Я переустанавливаю ruby ​​прямо сейчас ......... и это исправлено. Боль, хотя.

1 голос
/ 30 июля 2012

Как насчет cd в rubysrc / ext / zlib, затем ruby extendconf.rb, затем make, make install.

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

Я сделал это на Ubuntu 10.04 и прошел успешно.

1 голос
/ 06 сентября 2010

, если 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
1 голос
/ 21 сентября 2008

Чаще всего он появляется, когда ваша загрузка не удалась - то есть у вас поврежден драгоценный камень из-за тайм-аута сети, неправильной загрузки руководства или чего-то еще. Просто попробуйте еще раз или загрузите драгоценные камни вручную и укажите gem на файлы.

1 голос
/ 27 августа 2008

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

0 голосов
/ 21 октября 2009

установить чистый ruby ​​zlib, если ничего не помогает

0 голосов
/ 14 августа 2009

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

...