Сведения о вопросе

Martincow

21:06, 1st October, 2020

Теги

ruby   gem    

не могу установить ruby драгоценные камни - Ошибки работы с zlib

Просмотров: 513   Ответов: 9

Я пытаюсь установить некоторые драгоценные камни Ruby, чтобы использовать Ruby для уведомления меня, когда я получаю сообщения twitter. Однако, сделав 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/



  Сведения об ответе

LAST

19:35, 11th August, 2020

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

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


  Сведения об ответе

PIRLO

09:51, 20th August, 2020

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

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

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

------The-start-of-the-HOW-TO-------------------------

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

echo $PATH

Например, если в системе есть 2 версии irb, одна из которых установлена системой управления пакетами "official", скажем, yum или apt-get, to /usr/bin/irb, а другая скомпилирована пользователем scoobydoo и находится в /home/scoobydoo/ourcompiledruby/bin, то возникает вопрос, какой из двух irb-s будет выполнен.

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

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

и перезапускает bash shell, закрывая окно terminal и открывая новое, а затем вводя 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 позволяет обычным пользователям, которые не имеют корневого доступа или хотят экспериментировать с программным обеспечением not-that-trusted, создавать их и использовать без каких-либо привилегий root.

rest из этого mini-how-to предполагает, что мы будем создавать нашу собственную версию ruby и использовать нашу собственную версию почти независимо от того, что установлено в системе официальным программным обеспечением для управления пакетами дистрибутива.

1)=============================

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

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 shell, закрыв текущее окно terminal и открыв новое или введя команду

bash

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

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

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

apt-get install zlibc zlib1g-dev zlib1g

кажется, этого достаточно для системы Debian. Идея заключается в том, что и библиотечный файл, и заголовочные файлы доступны в системном пути поиска "official". Обычно apt-вам и так разместить файлы заголовков к /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)=============================

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

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

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

ruby `which gem` install rake

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

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

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

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

alias irb="`which ruby` -KU "

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

------The-end-of-the-HOW-TO------------------------


  Сведения об ответе

dumai

21:06, 1st October, 2020

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

gem update --system

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

Переустановка rubygems не помогла. Я переустановлю ruby правильно now.........and это исправлено. Но все же боль.


  Сведения об ответе

appple

19:34, 3rd August, 2020

если 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


  Сведения об ответе

park

07:45, 4th August, 2020

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


  Сведения об ответе

SSESION

13:28, 7th August, 2020

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

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

Я сделал это на ubuntu 10.04 и был успешен.


  Сведения об ответе

padenie

21:32, 9th August, 2020

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


  Сведения об ответе

appple

22:06, 21st August, 2020

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


  Сведения об ответе

LIZA

17:06, 24th August, 2020

установите pure ruby zlib, если все остальное не удается


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться