Ignorando o GEM porque suas extensões não são construídas

133

Nos meus computadores de trabalho e domésticos, atualizei recentemente o Ruby para a 2.3.1, usando ruby-install. eu usochruby como meu switcher Ruby.

Comecei a ver este aviso no meu terminal:

Ignoring bcrypt-3.1.11 because its extensions are not built.  Try: gem pristine bcrypt --version 3.1.11
Ignoring bcrypt-3.1.10 because its extensions are not built.  Try: gem pristine bcrypt --version 3.1.10
Ignoring binding_of_caller-0.7.2 because its extensions are not built.  Try: gem pristine binding_of_caller --version 0.7.2
Ignoring byebug-9.0.5 because its extensions are not built.  Try: gem pristine byebug --version 9.0.5
Ignoring byebug-5.0.0 because its extensions are not built.  Try: gem pristine byebug --version 5.0.0
Ignoring concurrent-ruby-ext-1.0.2 because its extensions are not built.  Try: gem pristine concurrent-ruby-ext --version 1.0.2
Ignoring debug_inspector-0.0.2 because its extensions are not built.  Try: gem pristine debug_inspector --version 0.0.2

No meu trabalho, computador, a lista era muito mais longa, mas fácil de resolver. Quando tentei o sugerido gem pristine GEM, ele me disse que não conseguia encontrar a gema, então corrigem install GEM e isso foi resolvido.

Em casa, nada está funcionando.

Coisas que eu tentei, do senso comum e várias outras perguntas da pilha:

  • gem pristine GEM
  • gem pristine --all
  • desinstalando e reinstalando a gema
  • gem update
  • gem update --system
  • bundle update
  • desinstalando e reinstalando bundler
  • desinstalando e reinstalando rails (Embora não seja um problema específico do Rails.)
  • excluindo ~/.bundle/
  • abertura XCode e permitir que ele instale algumas extensões (ele precisava fazê-lo, mas não corrigiu nada).
  • executando brew doctore resolvendo todos os problemas menores, então brew updateebrew upgrade
  • gem install curb (Não consigo imaginar o que essa gema tem a ver com esse problema, mas duas pessoas diferentes a listaram como a última etapa de sua correção para o mesmo aviso.)
Phillip Longman
fonte
1
Estou vendo o mesmo aviso se as gemas não estiverem instaladas. Eu desinstalei bcrypte ele ainda me deu dois avisos sobre isso.
Phillip Longman
1
você atualizou o bundler? desinstalar e reinstalar usará apenas o que estiver no seu Gemfile.lock. Bundler é quem cria as extensões. Além disso, sua saída está listando várias versões de gemas, então você deve saber que esse sistema é amplo para essa versão do ruby ​​(o que significa que você terá várias gemas para reconstruir).
Anthony
Eu estava na minha pasta pessoal, não em um projeto Rails, então não havia Gemfile.
Phillip Longman
O mesmo problema aconteceu comigo (usando o rvm). gem pristine --allnão funcionou. Resolvido excluindo todas as jóias, incluindo o empacotador. Em seguida, instalado bundler gem install bundlere, finalmente, navegado de volta para o meu projeto e correu bundle installque reinstalar todos os meus jóias e tudo está funcionando
David Watson
No meu caso, foi causado por uma extensão do vim. Eu fiz o pseudônimo vim = "rvm use system do vim" para contornar isso. Mas só vi o aviso quando saí do vim; se você o estiver vendo em outras situações, isso provavelmente não se aplicará.
Brian Deterling

Respostas:

179

Hoje me deparei com esse problema exato - recebendo avisos como este para gemas que nem estavam instaladas!

... Bem, as gemas foram instaladas - para um rubi diferente daquele que eu havia ativado no chruby (2.2.3 vs 2.3.1).

Mudar para todos os diferentes rubis e rodar gem pristine --allem todos eles resolveu o problema.

sevenseacat
fonte
3
Isso funcionou para mim fazendo isso apenas no ruby ​​atual (eu uso o rvm). Talvez isso impede alguém de fazer muita limpeza;)
Sandro L
1
Às vezes gem pristine --allnão é bom. Veja esta resposta em Ask Different para mais informações.
GDP2
Se gem pristine --allhouver problemas de permissão, verifique which ruby. brew link --overwrite ruby && source ~/.bash_profilee executar gem pristine --alla ajuda pode
Chris Yim
Nenhuma dessas soluções está funcionando para mim e eu tenho esse mesmo problema.
Alex Cohen
19

Eu corri para esse problema e segui os mesmos comandos acima, até o ponto de remover todas as versões do Ruby instaladas anteriormente. No entanto, o erro persistiu.

Acontece que havia algumas pedras preciosas nas várias versões (desinstaladas anteriormente) do ~/.gem/ruby/. Depois de remover as pastas que não usei mais, os erros desapareceram.

opes
fonte
2
Isso fez por mim. rm -rf. Eu já havia tentado instalar intactamente todas as minhas jóias sem sucesso.
StevenNunez
10

Também tive esse problema hoje e ele ficou frustrado porque não sabia digitar porque meu editor inteiro piscou em vermelho com mensagens de erro.

Não sei ao certo o que exatamente o causou, mas acredito que é porque temos várias versões ruby ​​OU vários gerenciadores de versão ruby instalados e elas se sobrescrevem e, de outra forma, atrapalham seus caminhos em direção às gemas.

O gemcomando também é substituído quando você tem rbenv e rvm.

Veja quais você instalou digitando;

which rvm
which rbenv
which chruby

Se um deles estiver instalado, ele retornará um caminho. Em seguida, exclua-os, certifique-se de limpar completamente todos os diretórios e comece com uma instalação limpa.


Remover

Aqui está o que eu fiz para o rvm ;

rvm implode
gem uninstall rvm
rm -rf ~/.rvm
rm -rf ~/.rvmrc

Aqui está o que eu fiz para rbenv

Primeiro instale https://github.com/meowsus/rbenv-clean e , em seguida,

rbenv clean
sudo apt-get remove rbenv
rm -rf ~/.rbenv

Reinstalar

Então você tem um diretório inicial limpo para trabalhar. Reinstalei o rbenv com Como instalar o Ruby 2.1.4 no Ubuntu 14.04 . E finalmente;

rbenv rehash
Simon Somlai
fonte
Apenas remover o rvm coisas relacionadas fixa este problema para mim no MacOS
neu242
6

Eu fiz tudo mencionado acima, incluindo

  • xcode-select --install
  • reinstalar ruby
  • reinstalar todas as gemas
  • jóia intocada --todos

mas o problema era o mesmo para mim. Acabei de reiniciar o meu Mac como a última esperança e as mensagens de aviso desapareceram.

Estranho, mas se alguém tiver problemas com esse problema depois de tentar tudo no StackOverflow, tente reiniciar sua máquina.

Sebastian Kim
fonte
4
Obrigado por compartilhar a dica de reinicialização. Eu tive o mesmo problema em um Mac e consegui resolver apenas iniciando uma nova sessão de terminal.
Libby
3

Se você instalou o RVM, é possível que você esteja capturando o erro porque instalou versões diferentes.

Verifique e remova versões inúteis, mas acho que essa não é uma boa abordagem. Enfim erros foram.

rvm list
rvm use ruby-version
rvm remove ruby-useless-version

Após a atualização dos cocoapods, ele deve ser injetado em .rvm GEM_HOME

gem uninstall cocoapods
gem install cocoapods

Provavelmente pod COMMANDirá lançar o erro sobre minitestgem, então -gem install minitest

dimpiax
fonte
2

TL; DR - As gemas Ruby não gostam de Rubis que são executadas a partir de links simbólicos ou movidas de onde foram construídas (devido a shebangs incorporados)

Se o diretório Ruby for chamado ou os vars de ambiente apontarem para um diretório com link simbólico ou forem copiados ou renomeados, é provável que esta mensagem seja. Estou usando o chruby e estava simbolizando /opt/rubies/-> /usr/local/ruby/, mas a lógica dinâmica de localização de bibliotecas do Ruby não funciona bem com isso.

A solução no meu caso foi substituir o link simbólico por rubis reais /opt/rubies/e executar gem pristine --allem cada Ruby. Para outros que usam RVM ou Rbenv, boa sorte com isso sem começar do zero.

Este pode não ser o seu problema exato, mas espero que ajude.


fonte
1
Acabou sendo a corrida gem pristine --allde todos eles. Obrigado por ressuscitar esta questão morta. Eu estava quase queimando tudo e recomeçando.
Phillip Longman
2

Adicionando meu próprio sabor aqui. Eu uso rbenvinstalado via Homebrew e estava recebendo quatro dessas mensagens "ignorando ... extensões não construídas". Especificamente:

Ignoring bcrypt-3.1.12 because its extensions are not built.  Try: gem pristine bcrypt --version 3.1.12
Ignoring bindex-0.5.0 because its extensions are not built.  Try: gem pristine bindex --version 0.5.0
Ignoring bootsnap-1.3.2 because its extensions are not built.  Try: gem pristine bootsnap --version 1.3.2
Ignoring byebug-10.0.2 because its extensions are not built.  Try: gem pristine byebug --version 10.0.2

Eu tentei muitas coisas neste tópico sem sorte. Finalmente, no meu caso, fiz:

  • brew uninstall rbenv
  • rm -rf ~/.rbenv
  • brew install rbenv

Neste ponto, eu ainda estava recebendo os erros, mas agora tinha apenas uma versão do Ruby para lidar com:

$ rbenv versions
* system (set by /Users/will/.rbenv/version)

Neste ponto, tentei, sudo gem pristine --allmas fui rejeitado por permissões no diretório Gems do sistema.

Então eu passei e corri intocada em cada jóia, como

sudo gem pristine bcrypt --version 3.1.12 (etc)

E finalmente os erros se foram.

wrydere
fonte
1

Esse é um tópico antigo, mas eu mesmo me deparei com esse problema.

Você não precisa reiniciar sua máquina, apenas atualiza seu ambiente; pode fazer isso com o comando rehash:

rehash

Na página do manual: rehash command re-computes the internal hash table of the contents of directories listed in the path environmental variable to account for new commands added.

yacc
fonte
1
De que sistema operacional você está falando?
rbanffy
rehashou hash -rpara bash é um comando shell disponível no * nix. Quando o shell C é iniciado, ele cria uma tabela de hash de todos os comandos em seu caminho: cada nome de comando e seu nome de caminho absoluto. Portanto, após iniciar uma execução do csh, se novos programas forem adicionados aos diretórios ao longo do caminho, você precisará usar o comando rehash do shell para reconstruir sua tabela de hash. (cf: docstore.mik.ua/orelly/unix3/upt/ch27_06.htm )
yacc
1

Eu tive esse problema, mas somente quando estava iniciando a tmuxsessão usandotmuxinator .

Descobri que é porque eu estou usando tmuxinatorfrom em brewvez de instalá-lo usando gem install. Talvez o uso chrubyao mesmo tempo tenha contribuído para o problema também.

p / s: Também removi o ruby ​​não utilizado, ~/.gem/rubymas duvido que esse seja o motivo pelo qual esse problema foi resolvido.

Amree
fonte
1

A execução gem pristine --allnão ajudou no começo, mas então percebi: o script que eu estava executando começou com a linha:

#!/usr/bin/ruby

No meu sistema macOS (Catalina, mas acho que não importa), isso aponta para o Ruby que acompanha o sistema, não o instalado pelo RVM. Corridagem pristine --all estava consertando a instalação do RVM, mas meu script estava chamando uma versão diferente do Ruby.

A correção para mim foi usar o envcomando para chamar o Ruby especificado nos shell atuais PATH. Alterando a linha superior do script para isso, foi corrigido:

#!/usr/bin/env ruby

Dave Ceddia
fonte
Apenas aconteceu comigo - obrigado! Isso significa que bundle installinstalou as gemas (e suas extensões nativas) para o ruby ​​selecionado por meio do switcher RVM Ruby, onde um script referente ao sistema Ruby não pode encontrá-las. Sua solução é a prática padrão para fazer com que scripts e gemas Ruby funcionem com rubis instalados pelo usuário ( consulte ).
tanius
Isso me colocou no caminho certo! No meu caso, eu queria que o tmuxinator fosse um utilitário (não um dep incluído para um projeto específico), então eu o instalei no Ubuntu. Então, fazendo apt purge tmuxinatore depois gem install tmuxinatordeu certo. Provavelmente vou precisar instalá-lo sempre que atualizar minha versão ruby ​​que não é do projeto, mas gosto mais disso. Obrigado!
labirinto
1

Executando o Mac OS Catalina, brew e rbenv ...

Tendo encontrado esse problema exato hoje e analisado todas as respostas aqui, acabei encontrando outra razão para esse erro:

Ignoring nokogiri 1.10.7 because its extensions are not built. Try: gem pristine nokogiri --version 1.10.7

E, claro, a jóia intocada não funcionou.

Meu problema foi um variáveis ​​de ambiente GEM_HOME e GEM_PATH codificadas que estavam substituindo rbenv.

Portanto, verifique se você não configurou GEM_PATH e GEM_HOME em ~ / .zshrc

Tomm P
fonte
0

Desinstalar e reinstalar o Vagrant também funciona. Há um unistall.toolscript bash incluído na imagem .dmg do instalador que removerá o Vagrant.

Encontre esta solução aqui: Atualizando extensões Vagrant e Gems não incorporadas

Jeff Wigal
fonte
0

Eu tive o mesmo problema e estou usando o rbenv. Por alguma razão, minha configuração global de rbenv desapareceu. Para corrigir esse problema, defino a versão global como uma das minhas versões rbenv ... por exemplo:

rbenv global 2.5.1

Eric Jones
fonte
0

Isso também é um problema quando você está desenvolvendo no Mac e cria uma imagem do Docker: https://forums.aws.amazon.com/thread.jspa?messageID=879802&tstart=0

Quando você faz uma "instalação de pacote configurável - implantação", o bundler cria um diretório de fornecedores com suas jóias. Observe que, embora isso inclua suas jóias na pasta local, ele incluirá apenas as extensões nativas da sua plataforma. Como você está no macOS, será o Darwin. Você precisará repetir o processo em um ambiente linux x86 de 64 bits.

NorseGaud
fonte
0

A sugestão de Libby de apenas iniciar uma nova sessão de terminal (que ela comentou sobre a resposta de Sebastian Kim) funcionou para mim. Muito mais rápido do que qualquer um dos outros também, então eu queria dar uma resposta para ficar mais visível.

jim
fonte
0

No meu caso, eu estava tentando executar, pristine --allmas estava obtendo:

Ignoring ffi-1.11.1 because its extensions are not built.  Try: gem pristine ffi --version 1.11.1
Ignoring jaro_winkler-1.5.3 because its extensions are not built.  Try: gem pristine jaro_winkler --version 1.5.3
Ignoring psych-3.1.0 because its extensions are not built.  Try: gem pristine psych --version 3.1.0
/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': incompatible library version - /.gem/gems/psych-3.1.0/lib/psych.bundle (fatal) 

Em seguida, apaguei o conteúdo Users/{{user.name}}⁩/⁨.gem⁩e, como precisava executar bundle install --force, reinstalei tudo e o comando pristine --allfuncionou conforme o esperado

Luisa Hernández
fonte
0

Esta solução funcionou para mim no RubyMine IntelliJ

Eu tinha dois terminais diferentes sendo usados ​​e RVMe ruby<Version>.

Solução:

Eu tive que mudar para a versão RVM para que os erros desaparecessem Preferences>Languages&Frameworks>Ruby SDK

Erros:

Ignoring executable-hooks-1.6.0 because its extensions are not built. Try: gem pristine executable-hooks --version 1.6.0 rubymine

Ignoring gem-wrappers-1.4.0 because its extensions are not built. Try: gem pristine gem-wrappers --version 1.4.0

insira a descrição da imagem aqui

Roger Perez
fonte