Mengabaikan GEM karena ekstensi tidak dibangun


133

Di komputer kerja dan komputer di rumah saya, saya baru-baru ini memutakhirkan Ruby ke 2.3.1, menggunakan ruby-install. Saya menggunakan chrubysebagai switcher Ruby saya.

Saya mulai melihat peringatan ini di terminal saya:

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

Pada pekerjaan saya, komputer, daftarnya jauh lebih lama, tetapi mudah diselesaikan. Ketika saya mencoba yang disarankan gem pristine GEM, itu memberitahu saya tidak dapat menemukan permata, jadi saya berlari gem install GEM, dan itu menyelesaikannya.

Di rumah, tidak ada yang bekerja.

Hal-hal yang telah saya coba, dari akal sehat dan berbagai pertanyaan Stack lainnya:

  • gem pristine GEM
  • gem pristine --all
  • mencopot dan menginstal ulang permata
  • gem update
  • gem update --system
  • bundle update
  • mencopot dan menginstal ulang bundler
  • mencopot dan menginstal ulang rails(Meskipun, itu bukan masalah Rails khusus.)
  • menghapus ~/.bundle/
  • membuka XCodedan membiarkannya menginstal beberapa ekstensi (memang perlu melakukannya, tetapi itu tidak memperbaiki apa pun.)
  • menjalankan brew doctordan menyelesaikan semua masalah kecil, lalu brew updatedanbrew upgrade
  • gem install curb (Saya tidak bisa membayangkan apa kaitan permata ini dengan masalah ini, tetapi dua orang yang berbeda mencatatnya sebagai langkah terakhir untuk memperbaiki peringatan yang sama.)

1
Saya bahkan melihat peringatan yang sama jika permata tidak diinstal. Saya mencopot pemasangan bcryptdan masih memberi saya dua peringatan tentang hal itu.
Phillip Longman

1
apakah Anda memperbarui bundler? mencopot dan menginstal ulang hanya akan menggunakan apa pun yang ada di Gemfile.lock Anda. Bundler adalah orang yang akan membangun ekstensi. Selain itu, output Anda mencantumkan beberapa versi permata sehingga Anda harus tahu bahwa ini adalah sistem yang luas untuk versi ruby ​​itu (artinya Anda akan memiliki beberapa permata untuk dibangun kembali).
Anthony

Saya berada di folder rumah saya, bukan proyek Rails, jadi tidak ada Gemfile.
Phillip Longman

Masalah yang sama terjadi pada saya (menggunakan rvm). gem pristine --alltidak bekerja. Dipecahkan dengan menghapus semua permata termasuk bundler. Kemudian menginstal bundler gem install bundlerdan akhirnya menavigasi kembali ke proyek saya dan menjalankan bundle installyang menginstal ulang semua permata saya dan semuanya berfungsi
David Watson

Dalam kasus saya, itu disebabkan oleh ekstensi vim. Saya melakukan alias vim = "rvm use system do vim" untuk mengatasinya. Tapi saya hanya melihat peringatan ketika saya keluar vim jadi jika Anda melihatnya dalam situasi lain ini mungkin tidak akan berlaku.
Brian Deterling

Jawaban:


179

Saya menemukan masalah yang tepat hari ini - mendapatkan peringatan seperti ini untuk permata yang bahkan tidak diinstal!

... Ya, ternyata permata telah dipasang - untuk ruby ​​berbeda dari yang saya aktifkan dengan chruby (2.2.3 vs 2.3.1).

Beralih ke semua rubi yang berbeda dan menjalankan gem pristine --allsemuanya memecahkan masalah.


3
Ini berhasil bagi saya melakukan ini hanya pada ruby ​​saat ini (saya menggunakan rvm). Mungkin ini mencegah seseorang melakukan terlalu banyak pembersihan;)
Sandro L

1
Terkadang gem pristine --alltidak ada gunanya. Lihat jawaban ini di Tanya Berbeda untuk info lebih lanjut.
GDP2

jika gem pristine --allmemiliki masalah izin, Anda harus memeriksa which ruby. brew link --overwrite ruby && source ~/.bash_profiledan jalankan gem pristine --alldapat membantu
Chris Yim

Tidak ada solusi yang bekerja untuk saya dan saya memiliki masalah yang sama.
Alex Cohen

19

Saya mengalami masalah ini dan mengikuti semua perintah yang sama seperti di atas, bahkan melangkah lebih jauh dengan menghapus semua versi Ruby yang saya instal sebelumnya. Namun, kesalahan tetap ada.

Ternyata, ada beberapa permata sisa untuk berbagai versi (yang sebelumnya dihapus) di ~/.gem/ruby/. Setelah menghapus folder yang tidak lagi saya gunakan, kesalahannya hilang.


2
Ini berhasil untuk saya. rm -rf. Saya sebelumnya telah mencoba untuk menginstal murni semua permata saya tanpa hasil.
StevenNunez

10

Saya juga mengalami masalah ini hari ini dan itu frustrasi karena saya tidak bisa mengetik karena seluruh editor saya menyala merah dengan pesan kesalahan.

Saya tidak sepenuhnya yakin apa yang menyebabkannya, tetapi saya percaya itu karena kami memiliki beberapa versi ruby ​​ATAU beberapa manajer versi ruby diinstal dan mereka menimpa satu sama lain dan jika tidak mengacaukan jalan Anda menuju permata.

The gemperintah juga mendapat ditimpa ketika Anda memiliki rbenv dan RVM.

Lihat mana yang telah Anda instal dengan mengetik;

which rvm
which rbenv
which chruby

Jika salah satu yang diinstal itu akan mengembalikan jalan. Kemudian hapus, pastikan untuk membersihkan semua direktori dan mulai dengan instalasi yang bersih.


Menghapus

Inilah yang saya lakukan untuk rvm ;

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

Inilah yang saya lakukan untuk rbenv

Pertama, instal https://github.com/meowsus/rbenv-clean , lalu

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

Pasang kembali

Maka Anda memiliki direktori home bersih untuk bekerja. Saya menginstal ulang rbenv dengan Cara menginstal Ruby 2.1.4 di Ubuntu 14.04 . Dan akhirnya;

rbenv rehash

Hanya menghapus hal-hal terkait rvm memperbaiki masalah ini untuk saya di macOS
neu242

6

Saya melakukan semua yang disebutkan di atas termasuk

  • xcode-select --install
  • instal ulang ruby
  • instal ulang semua permata
  • permata murni - semua

tetapi masalahnya sama bagi saya. Saya baru saja mem-boot ulang Mac saya sebagai harapan terakhir, dan pesan peringatan menghilang.

Aneh, tetapi jika ada yang berjuang dengan masalah ini setelah mencoba semuanya di StackOverflow, coba reboot mesin Anda.


4
Terima kasih telah berbagi tip reboot. Saya memiliki masalah yang sama, pada Mac, dan dapat menyelesaikannya hanya dengan memulai sesi terminal baru.
Libby

3

Jika Anda telah menginstal RVM, mungkin Anda mengalami kesalahan karena Anda telah menginstal versi yang berbeda.

Periksa dan hapus versi yang tidak berguna, tapi saya pikir ini bukan pendekatan yang baik . Pokoknya kesalahan hilang.

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

Setelah menyegarkan cocoapods, itu harus disuntikkan dalam .rvm GEM_HOME

gem uninstall cocoapods
gem install cocoapods

Mungkin pod COMMANDakan melempar kesalahan tentang minitestpermata, jadi -gem install minitest


2

TL; DR - Permata Ruby tidak suka Rubi berjalan dari symlinks atau dipindahkan dari tempat dibangunnya (karena tertanamnya shebang)

Jika direktori Ruby dipanggil atau vars environment menunjuk ke direktori symlink'ed, atau disalin atau diganti namanya, pesan ini mungkin. Saya menggunakan chruby dan symlinking /opt/rubies/->/usr/local/ruby/ , tetapi logika pencarian-perpustakaan dinamis Ruby tidak cocok dengan ini.

Solusi dalam kasus saya adalah mengganti symlink dengan rubi yang sebenarnya di /opt/rubies/dan jalankangem pristine --all di setiap Ruby. Bagi yang lain menggunakan RVM atau Rbenv, semoga sukses tanpa memulai dari awal lagi.

Ini mungkin bukan masalah persis Anda, tapi semoga membantu.


1
Ternyata itu berjalan gem pristine --alldi bagian mereka semua. Terima kasih telah membangkitkan pertanyaan mati ini. Aku hampir saja membakar semuanya dan memulai dari awal.
Phillip Longman

2

Menambahkan rasa saya sendiri di sini. Saya menggunakan rbenvdiinstal melalui Homebrew dan mendapatkan empat dari pesan "mengabaikan ... ekstensi tidak dibangun" ini. Secara khusus:

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

Saya mencoba banyak hal di utas ini tanpa hasil. Akhirnya dalam kasus saya saya lakukan:

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

Pada titik ini saya masih mendapatkan kesalahan, tetapi sekarang saya hanya memiliki satu versi Ruby untuk bersaing dengan:

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

Pada titik ini saya mencoba sudo gem pristine --alltetapi ditolak untuk izin pada direktori sistem Permata.

Jadi saya pergi dan berlari murni pada setiap permata, seperti

sudo gem pristine bcrypt --version 3.1.12 (dll)

Dan akhirnya kesalahan itu hilang.


1

Ini adalah utas lama, tetapi saya sendiri baru saja menemukan masalah ini.

Anda tidak perlu me-restart mesin Anda, Anda hanya perlu menyegarkan lingkungan Anda, Anda dapat melakukan ini dengan perintah pengulangan:

rehash

Dari halaman 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.


1
OS apa yang kamu bicarakan?
rbanffy

rehashatau hash -runtuk bash adalah perintah shell yang tersedia di * nix. Ketika shell C dimulai, ia membangun tabel hash dari semua perintah di path-nya: setiap nama perintah dan pathname absolutnya. Jadi, setelah Anda menjalankan csh running, jika program baru ditambahkan ke direktori di sepanjang path, Anda perlu menggunakan perintah rehash shell untuk membangun kembali tabel hash-nya. (lih: docstore.mik.ua/orelly/unix3/upt/ch27_06.htm )
yacc

1

Saya memiliki masalah ini tetapi hanya ketika saya memulai tmuxsesi menggunakantmuxinator .

Ternyata itu karena saya menggunakan tmuxinatordari brewbukannya menginstalnya menggunakan gem install. Mungkin menggunakan chrubypada saat yang sama berkontribusi pada masalah juga.

p / s: Saya juga menghapus rubi yang tidak digunakan dari ~/.gem/rubytetapi saya ragu itulah alasan masalah ini diselesaikan untuk saya.


1

gem pristine --allAwalnya berlari tidak membantu, tetapi kemudian saya menyadari: skrip yang saya jalankan dimulai dengan baris:

#!/usr/bin/ruby

Pada sistem macOS saya (Catalina, tapi saya pikir itu tidak penting), ini menunjuk ke Ruby yang datang dengan sistem, bukan yang diinstal oleh RVM. Larigem pristine --all memperbaiki instalasi RVM, tetapi skrip saya memanggil versi Ruby yang berbeda.

Perbaikan untuk saya adalah dengan menggunakan envperintah untuk memanggil Ruby mana saja yang ditentukan dalam shell saat ini PATH. Mengubah baris teratas skrip untuk memperbaikinya:

#!/usr/bin/env ruby


Baru saja terjadi pada saya - terima kasih! Itu berarti bundle installmenginstal permata (dan ekstensi asli mereka) untuk ruby ​​yang dipilih melalui RVM Ruby switcher, di mana skrip yang merujuk pada sistem Ruby tidak dapat menemukannya. Solusi Anda adalah praktik standar untuk membuat skrip dan permata Ruby berfungsi dengan rubi yang dipasang pengguna ( lihat ).
tanius

Ini menempatkan saya di jalur yang benar! Dalam kasus saya, saya ingin tmuxinator menjadi util (bukan dep yang dibundel untuk proyek tertentu), jadi saya dapat menginstalnya di Ubuntu. Melakukan apt purge tmuxinatordan kemudian gem install tmuxinatormembuatnya bekerja. Saya mungkin harus menginstalnya setiap kali saya memutakhirkan versi ruby ​​non-proyek saya, tetapi saya lebih suka ini. Terima kasih!
labirin

1

Menjalankan Mac OS Catalina, brew dan rbenv ...

Setelah menemukan masalah yang tepat hari ini, dan melewati semua jawaban di sini saya akhirnya menemukan alasan lain untuk kesalahan ini:

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

Dan tentu saja permata murni tidak berhasil.

Masalah saya adalah variabel lingkungan kode GEM_HOME dan GEM_PATH yang dikodekan keras yang menimpa rbenv.

Jadi, periksa bahwa Anda belum menyetel GEM_PATH dan GEM_HOME di ~ / .zshrc



0

Saya memiliki masalah yang sama dan saya menggunakan rbenv. Untuk beberapa alasan, pengaturan rbenv global saya hilang. Untuk memperbaiki masalah ini, saya mengatur versi global ke salah satu versi rbenv saya ... misalnya:

rbenv global 2.5.1


0

Ini juga masalah ketika Anda mengembangkan di Mac dan kemudian membangun gambar Docker: https://forums.aws.amazon.com/thread.jspa?messageID=879802&tstart=0

Saat Anda melakukan "bundle install --deployment", bundler akan membuat direktori vendor bersama permata Anda di dalamnya. Perhatikan bahwa sementara ini termasuk permata Anda di folder lokal, itu hanya akan mencakup ekstensi asli untuk platform Anda. Saat Anda menggunakan MacOS, ini akan menjadi Darwin. Anda harus mengulangi proses pada lingkungan linux x86 64-bit.


0

Saran Libby untuk memulai sesi terminal baru (yang dia mengomentari jawaban Sebastian Kim) bekerja untuk saya. Jauh lebih cepat daripada yang lain juga, jadi saya ingin membuatnya menjadi jawaban sehingga lebih terlihat.


0

Dalam kasus saya, saya mencoba lari pristine --alltetapi saya mendapatkan:

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) 

Kemudian, saya menghapus konten pada Users/{{user.name}}⁩/⁨.gem⁩saat itu karena saya perlu menjalankan bundle install --force, itu menginstal ulang semuanya, kemudian perintah pristine --allbekerja seperti yang diharapkan


0

Solusi ini bekerja untuk saya untuk RubyMine IntelliJ

Saya memiliki dua terminal berbeda yang digunakan dan RVMdan ruby<Version>.

Larutan:

Saya harus mengubahnya ke versi RVM agar kesalahannya hilang Preferences>Languages&Frameworks>Ruby SDK

Kesalahan:

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

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.