Ignorowanie GEM, ponieważ jego rozszerzenia nie są zbudowane

133

Niedawno zaktualizowałem Ruby do wersji 2.3.1, używając ruby-install. Używam chrubyjako mojego przełącznika Ruby.

Zacząłem widzieć to ostrzeżenie na moim terminalu:

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

W mojej pracy na komputerze lista była znacznie dłuższa, ale łatwa do rozwiązania. Kiedy wypróbowałem sugerowany gem pristine GEM, powiedział mi, że nie mogę znaleźć klejnotu, więc pobiegłem gem install GEMi to rozwiązało problem.

W domu nic nie działa.

Rzeczy, które próbowałem, od zdrowego rozsądku i różnych innych pytań dotyczących stosu:

  • gem pristine GEM
  • gem pristine --all
  • odinstalowanie i ponowne zainstalowanie klejnotu
  • gem update
  • gem update --system
  • bundle update
  • odinstalowanie i ponowne zainstalowanie bundler
  • odinstalowanie i ponowne zainstalowanie rails(chociaż nie jest to problem związany z Railsami).
  • usuwanie ~/.bundle/
  • otwieranie XCodei pozwalanie na zainstalowanie niektórych rozszerzeń (musiało to zrobić, ale nic nie naprawiło).
  • uruchamianie brew doctori rozwiązywanie wszystkich drobnych problemów, a następnie brew updateibrew upgrade
  • gem install curb (Nie mogę sobie wyobrazić, co ten klejnot ma wspólnego z tym problemem, ale dwie różne osoby wymieniły go jako ostatni etap naprawy tego samego ostrzeżenia).
Phillip Longman
źródło
1
Widzę nawet to samo ostrzeżenie, jeśli klejnoty nie są zainstalowane. Odinstalowałem bcrypti nadal dało mi to dwa ostrzeżenia.
Phillip Longman,
1
czy zaktualizowałeś pakiet? odinstalowanie i ponowna instalacja wykorzystają wszystko, co jest w twoim Gemfile.lock. Bundler jest tym, który zbuduje rozszerzenia. Ponadto, twoje wyjście zawiera listę wielu wersji klejnotów, więc powinieneś wiedzieć, że jest to cały system dla tej wersji ruby ​​(co oznacza, że ​​będziesz mieć wiele klejnotów do odbudowania).
Anthony
Byłem w moim katalogu domowym, a nie w projekcie Rails, więc nie było Gemfile.
Phillip Longman
Zdarzyło mi się to samo (używając rvm). gem pristine --allnie działał. Rozwiązany przez usunięcie wszystkich klejnotów, w tym pakietu. Następnie zainstalowałem pakiet gem install bundleri ostatecznie wróciłem do mojego projektu i uruchomiłem, bundle installktóry ponownie zainstalował wszystkie moje klejnoty i wszystko działa
David Watson
W moim przypadku było to spowodowane rozszerzeniem vim. Zrobiłem alias vim = "rvm use system do vim", żeby to obejść. Ale zobaczyłem ostrzeżenie tylko wtedy, gdy opuściłem vim, więc jeśli widzisz je w innych sytuacjach, prawdopodobnie nie będzie to miało zastosowania.
Brian Deterling

Odpowiedzi:

179

Właśnie dzisiaj natknąłem się na ten problem - otrzymywanie takich ostrzeżeń dla klejnotów, które nie zostały nawet zainstalowane!

... Cóż, okazuje się, że perełki zostały zainstalowane - za inny rubin niż ten, który aktywowałem z chrubami (2.2.3 vs 2.3.1).

Zmiana na wszystkie rubiny i bieganie gem pristine --allna nich wszystkich rozwiązało problem.

sevenseacat
źródło
3
To zadziałało dla mnie, robiąc to tylko na obecnym rubinie (używam rvm). Może to przeszkadza komuś zrobić zbyt wiele porządków;)
Sandro L
1
Czasami gem pristine --allnic nie da. Zobacz tę odpowiedź w Ask Different, aby uzyskać więcej informacji.
GDP2
jeśli gem pristine --allma problemy z uprawnieniami, powinieneś sprawdzić which ruby. brew link --overwrite ruby && source ~/.bash_profilei biegnij gem pristine --allmoże pomóc
Chris Yim
Żadne z tych rozwiązań nie działa i mam ten sam problem.
Alex Cohen
19

Natknąłem się na ten problem i wykonałem wszystkie te same polecenia, co powyżej, posuwając się nawet do usunięcia wszystkich moich wcześniej zainstalowanych wersji Ruby. Jednak błąd nadal występował.

Okazało się, że zostało kilka klejnotów dla różnych (wcześniej odinstalowanych) wersji w ~/.gem/ruby/. Po usunięciu folderów, których już nie używałem, błędy zniknęły.

opes
źródło
2
Zrobiło to dla mnie. rm -rf. Wcześniej bezskutecznie próbowałem zainstalować wszystkie moje klejnoty.
StevenNunez
10

Miałem ten problem dzisiaj i frustrowałem się, ponieważ nie mogłem pisać, ponieważ cały mój edytor migał na czerwono z komunikatami o błędach.

Nie jestem do końca pewien, co dokładnie to spowodowało, ale uważam, że dzieje się tak dlatego, że mamy wiele wersji języka Ruby LUB zainstalowanych jest wiele menedżerów wersji języka Ruby które nadpisują się nawzajem iw inny sposób psują ścieżki do klejnotów.

Plik gemPolecenie pobiera również nadpisane gdy masz rbenv i RVM.

Zobacz, które z nich zainstalowałeś, wpisując;

which rvm
which rbenv
which chruby

Jeśli jeden z nich zostanie zainstalowany, zwróci ścieżkę. Następnie usuń je, upewnij się, że całkowicie wyczyściłeś wszystkie katalogi i zacznij od czystej instalacji.


Usunąć

Oto co zrobiłem dla rvm ;

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

Oto, dla czego zrobiłem rbenv

Najpierw zainstalowano https://github.com/meowsus/rbenv-clean , a następnie

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

Zainstaluj ponownie

Wtedy masz czysty katalog domowy do pracy. Ponownie zainstalowałem rbenv z Jak zainstalować Ruby 2.1.4 na Ubuntu 14.04 . I w końcu;

rbenv rehash
Simon Somlai
źródło
Samo usunięcie rzeczy związanych z rvm rozwiązało ten problem w systemie macOS
neu242
6

Zrobiłem wszystko, o czym mowa powyżej, w tym

  • xcode-select --install
  • zainstaluj ponownie ruby
  • ponownie zainstaluj wszystkie klejnoty
  • klejnot nieskazitelny - wszystko

ale dla mnie problem był ten sam. Właśnie ponownie uruchomiłem komputer Mac jako ostatnią nadzieję, a komunikaty ostrzegawcze zniknęły.

Dziwne, ale jeśli ktoś zmaga się z tym problemem po wypróbowaniu wszystkiego na StackOverflow, spróbuj ponownie uruchomić komputer.

Sebastian Kim
źródło
4
Dziękujemy za udostępnienie wskazówki dotyczącej ponownego uruchamiania. Miałem ten sam problem na komputerze Mac i udało mi się go rozwiązać, rozpoczynając nową sesję terminala.
Libby,
3

Jeśli zainstalowałeś RVM, możliwe, że łapiesz błąd, ponieważ zainstalowałeś różne wersje.

Sprawdź i usuń niepotrzebne wersje, ale myślę, że to nie jest dobre podejście. W każdym razie błędy zniknęły.

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

Po odświeżeniu cocoapods, należy go wstrzyknąć do .rvm GEM_HOME

gem uninstall cocoapods
gem install cocoapods

Prawdopodobnie pod COMMANDwyrzuci błąd o minitestgem, więc -gem install minitest

dimpiax
źródło
2

TL; DR - klejnoty Ruby nie lubią Rubinów uruchamianych z linków symbolicznych lub przenoszonych z miejsca, w którym zostały zbudowane (z powodu osadzonych shebangów)

Jeśli katalog Ruby jest wywoływany lub zmienne środowiskowe wskazują na katalog z dowiązaniem symbolicznym, są kopiowane lub mają zmienioną nazwę, prawdopodobnie pojawi się ten komunikat. Używam chruby i łączyłem symbolicznie /opt/rubies/-> /usr/local/ruby/, ale dynamiczna logika znajdowania bibliotek Rubiego nie działa z tym dobrze.

Rozwiązaniem w moim przypadku było zastąpienie dowiązania symbolicznego rzeczywistymi rubinami /opt/rubies/i uruchomgem pristine --all w każdym Rubim. Dla innych korzystających z RVM lub Rbenv, powodzenia bez zaczynania od zera.

Może to nie być dokładny problem, ale miejmy nadzieję, że pomoże.


źródło
1
Okazało się, że to bieganie gem pristine --allpo ich wszystkich. Dzięki za wskrzeszenie tego martwego pytania. Byłem bliski spalenia tego wszystkiego i rozpoczęcia od nowa.
Phillip Longman
2

Dodaję tutaj swój własny smak. Używam rbenvzainstalowanego przez Homebrew i otrzymywałem cztery z tych komunikatów „ignorujących ... rozszerzenia nie zostały zbudowane”. Konkretnie:

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

Próbowałem wielu rzeczy w tym wątku bez powodzenia. Wreszcie w moim przypadku:

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

W tym momencie nadal otrzymywałem błędy, ale teraz miałem tylko jedną wersję Rubiego do pokonania:

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

W tym momencie próbowałem, sudo gem pristine --allale odmówiono mi uprawnień do katalogu systemowego Gems.

Więc przeszedłem i przebiegłem nieskazitelnie na każdym klejnocie, jak

sudo gem pristine bcrypt --version 3.1.12 (itp)

I w końcu błędy zniknęły.

wrydere
źródło
1

To jest stary wątek, ale sam napotkałem ten problem.

Nie musisz ponownie uruchamiać komputera, wystarczy odświeżyć środowisko, możesz to zrobić za pomocą polecenia rehash:

rehash

Ze strony podręcznika: 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
źródło
1
O jakim systemie operacyjnym mówisz?
rbanffy
rehashlub hash -rdla bash jest poleceniem powłoki dostępnym na * nix. Po uruchomieniu powłoka C buduje tablicę skrótów wszystkich poleceń w swojej ścieżce: nazwy każdego polecenia i jego bezwzględnej ścieżki. Tak więc po uruchomieniu csh, jeśli nowe programy są dodawane do katalogów wzdłuż ścieżki, musisz użyć polecenia rehash powłoki, aby odbudować tablicę skrótów. (por .: docstore.mik.ua/orelly/unix3/upt/ch27_06.htm )
yacc
1

Miałem ten problem, ale tylko gdy zaczynałem tmuxsesję używająctmuxinator .

Okazało się, że to dlatego, że używam tmuxinatorz brewzamiast instalować go za pomocą gem install. Być może używanie chrubyw tym samym czasie również przyczyniło się do problemu.

p / s: Usunąłem również nieużywany rubin z, ~/.gem/rubyale wątpię, że to jest powód, dla którego ten problem został rozwiązany.

Amree
źródło
1

Bieganie gem pristine --allna początku nie pomogło, ale potem zdałem sobie sprawę: skrypt, który uruchamiałem, zaczynał się od wiersza:

#!/usr/bin/ruby

W moim systemie macOS (Catalina, ale nie sądzę, że to ma znaczenie) wskazuje to na Ruby, który był dostarczony z systemem, a nie ten zainstalowany przez RVM. Uruchomienie gem pristine --allnaprawiało instalację RVM, ale mój skrypt wywoływał inną wersję Rubiego.

Rozwiązaniem dla mnie było użycie envpolecenia do wywołania dowolnego Rubiego, który jest określony w bieżącej powłoce PATH. Zmiana górnej linii skryptu na to naprawiła problem:

#!/usr/bin/env ruby

Dave Ceddia
źródło
Właśnie mi się przytrafiło - dzięki! Oznacza to, że bundle installzainstalował klejnoty (i ich natywne rozszerzenia) dla ruby ​​wybranego za pomocą przełącznika RVM Ruby, gdzie skrypt odnoszący się do systemu Ruby nie może ich znaleźć. Twoje rozwiązanie jest standardową praktyką, aby skrypty i klejnoty Rubiego działały z rubinami zainstalowanymi przez użytkownika ( zobacz ).
tanius
To postawiło mnie na właściwej drodze! W moim przypadku chciałem, aby tmuxinator był narzędziem (a nie składem dołączonym do konkretnego projektu), więc zainstalowałem go na Ubuntu. Robiłem to, apt purge tmuxinatora potem gem install tmuxinatordziałało. Prawdopodobnie będę musiał zainstalować go za każdym razem, gdy zaktualizuję moją wersję Ruby, która nie jest projektem, ale podoba mi się to bardziej. Dzięki!
labirynt
1

Uruchamianie Mac OS Catalina, brew i rbenv ...

Natknąwszy się dzisiaj na ten dokładny problem i przejrzawszy wszystkie odpowiedzi tutaj, w końcu natknąłem się na inny powód tego błędu:

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

I oczywiście nieskazitelny klejnot nie działał.

Moim problemem były na stałe zakodowane zmienne środowiskowe GEM_HOME i GEM_PATH, które przesłaniały rbenv.

Więc sprawdź, czy nie ustawiłeś GEM_PATH i GEM_HOME w ~ / .zshrc

Tomm P
źródło
0

Miałem ten sam problem i używam rbenv. Z jakiegoś powodu zaginęło moje globalne ustawienie rbenv. Aby naprawić ten problem, ustawiłem wersję globalną na jedną z moich wersji rbenv ... na przykład:

rbenv global 2.5.1

Eric Jones
źródło
0

Jest to również problem, gdy tworzysz na komputerze Mac, a następnie tworzysz obraz Dockera: https://forums.aws.amazon.com/thread.jspa?messageID=879802&tstart=0

Kiedy wykonasz "instalację pakietu - wdrożenie", bundler utworzy katalog dostawcy z twoimi klejnotami w nim. Zauważ, że chociaż obejmuje to twoje klejnoty w folderze lokalnym, obejmie tylko natywne rozszerzenia dla twojej platformy. Ponieważ używasz macOS, będzie to Darwin. Będziesz musiał powtórzyć ten proces w 64-bitowym środowisku Linux x86.

NorseGaud
źródło
0

Sugestia Libby, aby po prostu rozpocząć nową sesję terminalową (którą skomentowała na temat odpowiedzi Sebastiana Kima) zadziałała dla mnie. Znacznie szybciej niż którykolwiek z pozostałych, więc chciałem dać odpowiedź, aby była bardziej widoczna.

jim
źródło
0

W moim przypadku próbowałem biec, pristine --allale otrzymywałem:

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) 

Następnie usunąłem zawartość, Users/{{user.name}}⁩/⁨.gem⁩gdy musiałem uruchomić bundle install --force, ponownie zainstalowałem wszystko, a następnie polecenie pristine --alldziałało zgodnie z oczekiwaniami

Luisa Hernández
źródło
0

To rozwiązanie zadziałało dla mnie w RubyMine IntelliJ

Miałem dwa różne terminale i RVMi ruby<Version>.

Rozwiązanie:

Musiałem przełączyć go na wersję RVM, aby błędy zniknęły Preferences>Languages&Frameworks>Ruby SDK

Błędy:

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

wprowadź opis obrazu tutaj

Roger Perez
źródło