Pergunta

Estou tentando instalar algumas Ruby Gems para poder usar Ruby para me avisar quando receber mensagens no Twitter.Porém, depois de fazer um gem update --system, agora recebo um erro zlib toda vez que tento fazer um gem install de qualquer coisa.abaixo está a saída do console que recebo ao tentar instalar Ruby Gems.(juntamente com a saída de 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/
Foi útil?

Solução

Eu comecei a receber isso esta noite também.Pesquisando no Google encontrei um monte de sugestões que não geraram resultados

gem update --system

e alguns colam o código de jamis que deveria substituir uma função em package.rb, mas o original que deveria substituir não foi encontrado em lugar nenhum.

A reinstalação do rubygems não ajudou.Estou reinstalando o Ruby agora.........e está consertado.Dor embora.

Outras dicas

Encontrei!Tive o mesmo problema no windows (apareceu de repente sem eu fazer uma atualização, mas tanto faz):

Tem algo a ver com várias versões conflitantes do zlib (eu acho).

Em ruby/lib/ruby/1.8/i386-msvcrt, certifique-se de que existe um arquivo zlib.so.No meu caso, já estava lá.Caso contrário, você pode tentar instalar o Ruby-zlib.

Então vá para ruby/lib/ruby/site_ruby/1.8./i386-msvcrt e exclua o arquivo zlib.so lá.

Em Ruby/bin, deve haver um zlib1.dll.Por algum motivo minha versão Ruby não usava essa dll.Baixei a versão mais recente (1.2.3) e instalei lá.Tive que renomeá-lo para zlib.dll para que pudesse ser usado.

E tada!Rubygems funcionou novamente.

Espero que isto ajude.

Em primeiro lugar, agradeço à pessoa que encontrou a solução para o problema do zlib ausente.(Não fui eu.:-)

Infelizmente perdi o link para a postagem original, mas a essência da solução no Linux é compilar o Ruby enquanto os arquivos de cabeçalho zlib estão disponíveis para o script de configuração do Ruby.No Debian isso significa que os pacotes de desenvolvimento zlib devem ser instalados antes de começar a compilar o Ruby.

O resto do meu texto aqui não contém nada de novo e é encorajado a omiti-lo, se Você se sentir confortável em personalizar Seu ambiente de execução em sistemas operacionais do tipo UNIX.O que se segue é uma combinação de uma breve introdução a alguns princípios básicos e instruções passo a passo.

------O-início-do-COMO-FAZER----------------------------

Se alguém quiser executar um programa, digamos, irb, a partir de um console, então o arquivo chamado irb será pesquisado nas pastas em uma ordem descrita por uma variável de ambiente chamada PATH.É possível ver o valor do PATH digitando em um shell bash (e pressionando a tecla Enter):

echo $PATH

Por exemplo, se houver 2 versões do irb no sistema, uma instalada pelo sistema de gerenciamento de pacotes "oficial", digamos, yum ou apt-get, em /usr/bin/irb e a outra que é compilada pelo usuário chamado scoobydoo e reside em /home/scoobydoo/ourcompiledruby/bin então surge a pergunta: qual dos dois irb-s será executado.

Se alguém gravar no /home/scoobydoo/.bashrc uma linha como:

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

e reinicia o shell do Bash fechando a janela do terminal e abrindo uma nova e depois digitando IRB no console, o/home/scoobydoo/OurCompiledRuby/bin/IRB é executado.Se alguém escrevesse

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

para o /home/scoobydoo/.bashrc , então o /usr/bin/irb seria executado.

Na prática, quer-se escrever

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

porque isso precede todos os valores que o PATH tinha antes desta atribuição para /home/scoobydoo/ourcompiledruby/bin.Caso contrário, haverá problemas, porque nem todas as ferramentas comuns residem em /usr/bin e provavelmente será necessário ter vários aplicativos personalizados em uso.

A mesma lógica se aplica às bibliotecas, exceto que o nome da variável de ambiente é LD_LIBRARY_PATH

O uso de LD_LIBRARY_PATH e PATH permite que usuários comuns, que não têm acesso root ou que desejam experimentar softwares não tão confiáveis, os construam e usem sem a necessidade de quaisquer privilégios de root.

O restante deste mini-como fazer pressupõe que construiremos nossa própria versão do Ruby e usaremos nossa própria versão quase independentemente do que estiver instalado no sistema pelo software oficial de gerenciamento de pacotes da distribuição.

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

Primeiro, criam-se algumas pastas e definem-se as variáveis ​​de ambiente, para que as pastas sejam "úteis".

mkdir /home/scoobydoo/ourcompiledruby
mkdir -p /home/scoobydoo/lib/our_gems

Adicionam-se as seguintes 2 linhas ao /home/scoobydoo/.bashrc

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

Reinicie o shell bash fechando a janela do terminal atual e abrindo uma nova ou digitando

bash

na linha de comando da janela atualmente aberta.As alterações no /home/scoobydoo/.bashrc não têm qualquer efeito nas janelas/sessões do terminal que foram iniciadas antes do salvamento da versão modificada do /home/scoobydoo/.bashrc A ideia é que o /home/scoobydoo/.bashrc seja executado automaticamente no início de uma sessão, mesmo que se faça logon pelo ssh.

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

Agora garantimos que os pacotes de desenvolvimento zlib estão disponíveis no sistema.Em abril de 2011, ainda não resolvi os detalhes, mas

apt-get install zlibc zlib1g-dev zlib1g

parece ser suficiente em um sistema Debian.A ideia é que tanto o arquivo da biblioteca quanto os arquivos de cabeçalho estejam disponíveis no caminho de busca "oficial" do sistema.Normalmente, apt-get e até mesmo coloca os arquivos de cabeçalho em /usr/include e os arquivos de biblioteca em /usr/lib

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

Baixe e descompacte a fonte tar.gz do http://www.ruby-lang.org

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

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

Se um comando de console como

which ruby

imprime no console

/home/scoobydoo/ourcompiledruby/bin/ruby

então a versão recém-compilada é aquela que é executada no comando

ruby --help

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

O resto dos programas, gem, irb, etc., podem ser executados corretamente usando comandos como:

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

Não deveria ser assim, mas desde abril de 2011 não descobri nenhuma maneira mais elegante de fazer isso.Se o

ruby `which gem` install rake

dá o erro zlib faltando novamente, então deve-se apenas tentar descobrir como fazer com que o zlib inclua arquivos e biblioteca disponíveis para o script de configuração do Ruby e recompile.(Desculpe, atualmente não tenho uma solução melhor para oferecer.)

Pode ser uma solução suja pode ser adicionar as seguintes linhas ao /home/scoobydoo/.bashrc

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

Na verdade, eu costumo usar

alias irb="`which ruby` -KU "

mas a gem deve ser executada sem fornecer ao Ruby os argumentos "-KU", caso contrário haverá erros.

------Fim-do-COMO-FAZER---------------------------

Uma reinstalação do Ruby resolveu esse problema.Não é o que eu queria;Eu queria saber por que estava tendo esse problema, mas está tudo resolvido.

Na maioria das vezes aparece quando o download falhou - ou seja,você tem uma gema corrompida devido ao tempo limite da rede, download manual com defeito ou qualquer outra coisa.Tente novamente ou baixe as gemas manualmente e aponte gem nos arquivos.

se gem update --system não funciona e renomeie ruby/bin/zlib1.dll para zlib.dll não ajuda a tentar:

Abrir arquivo RUBY_DIR\lib\ruby\site_ruby\1.8\rubygems.rb

E substituir existia def self.gunzip(data) por este:

  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

Que tal fazer cd em rubysrc/ext/zlib, então ruby extendconf.rb, então make, make install.

Depois disso, reinstale o Ruby.

Eu fiz isso no Ubuntu 10.04 e tive sucesso.

Tente atualizar ZLib antes de fazer qualquer outra coisa.Eu tive um problema semelhante no OS X e na atualização Comprimir::Zlib (uma interface Perl para ZLib) curou isso - então acho que uma versão antiga do ZLib (agora é 1.2.3) pode ser onde está o seu problema ...

instale Ruby zlib puro se tudo mais falhar

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top