Bỏ qua GEM vì các phần mở rộng của nó không được xây dựng


133

Trên cả máy tính làm việc và gia đình, gần đây tôi đã nâng cấp Ruby lên 2.3.1, sử dụng ruby-install. Tôi sử dụng chrubynhư trình chuyển đổi Ruby của tôi.

Tôi bắt đầu thấy cảnh báo này trong thiết bị đầu cuối của mình:

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

Về công việc, máy tính của tôi, danh sách dài hơn nhiều, nhưng dễ giải quyết. Khi tôi thử đề xuất gem pristine GEM, nó nói với tôi rằng nó không thể tìm thấy viên đá quý, vì vậy tôi đã chạy gem install GEMvà điều đó đã giải quyết nó.

Ở nhà, không có gì là làm việc.

Những điều tôi đã thử, từ lẽ thường và nhiều câu hỏi khác về Stack:

  • gem pristine GEM
  • gem pristine --all
  • gỡ cài đặt và cài đặt lại đá quý
  • gem update
  • gem update --system
  • bundle update
  • gỡ cài đặt và cài đặt lại bundler
  • gỡ cài đặt và cài đặt lại rails(Mặc dù, đó không phải là sự cố cụ thể của Rails.)
  • xóa ~/.bundle/
  • mở XCodevà để cho nó cài đặt một số tiện ích mở rộng (Nó cần phải làm điều đó, nhưng nó không sửa được gì cả.)
  • chạy brew doctorvà giải quyết tất cả các vấn đề nhỏ, sau đó brew updatebrew upgrade
  • gem install curb (Tôi không thể tưởng tượng viên ngọc này có liên quan gì đến vấn đề này, nhưng hai người khác nhau đã liệt kê nó là bước cuối cùng để khắc phục cùng một cảnh báo.)

1
Tôi thậm chí còn nhìn thấy cảnh báo tương tự nếu đá quý không được cài đặt. Tôi gỡ cài đặt bcryptvà nó vẫn cho tôi hai cảnh báo về nó.
Phillip Longman

1
bạn đã cập nhật gói? gỡ cài đặt và cài đặt lại sẽ chỉ sử dụng bất cứ thứ gì có trong Gemfile.lock của bạn. Bundler là người sẽ xây dựng các phần mở rộng. Ngoài ra, đầu ra của bạn đang liệt kê nhiều phiên bản đá quý, vì vậy bạn nên biết đây là hệ thống rộng rãi cho phiên bản ruby ​​đó (có nghĩa là bạn sẽ có nhiều đá quý để xây dựng lại).
Anthony

Tôi đã ở trong thư mục nhà của mình, không phải là một dự án Rails, vì vậy không có Gemfile.
Phillip Longman

Vấn đề tương tự đã xảy ra với tôi (sử dụng rvm). gem pristine --allđã không làm việc. Giải quyết bằng cách xóa tất cả các đá quý bao gồm cả bundler. Sau đó cài đặt gói gem install bundlervà cuối cùng điều hướng trở lại dự án của tôi và chạy bundle installcài đặt lại tất cả các viên đá quý của tôi và mọi thứ đang hoạt động
David Watson

Trong trường hợp của tôi, nó được gây ra bởi một phần mở rộng vim. Tôi đã làm bí danh vim = "rvm use system do vim" để làm việc xung quanh nó. Nhưng tôi chỉ thấy cảnh báo khi tôi thoát vim vì vậy nếu bạn thấy nó trong các tình huống khác thì điều này có lẽ sẽ không được áp dụng.
Brian Det mét

Câu trả lời:


179

Tôi đã gặp vấn đề chính xác này ngày hôm nay - nhận được những cảnh báo như thế này đối với những viên đá quý chưa được cài đặt!

... Chà, hóa ra những viên đá quý đã được cài đặt - cho một viên hồng ngọc khác với viên ngọc mà tôi đã thiết lập hoạt động với màu sắc (2.2.3 so với 2.3.1).

Chuyển sang tất cả các viên ruby ​​khác nhau và chạy gem pristine --alltrên tất cả chúng đã giải quyết vấn đề.


3
Điều này làm việc cho tôi chỉ làm điều này trên viên ruby ​​hiện tại (tôi sử dụng rvm). Có lẽ điều này ngăn ai đó dọn dẹp quá nhiều;)
Sandro L

1
Đôi khi gem pristine --allsẽ làm không tốt. Xem câu trả lời này trên Hỏi khác để biết thêm.
GDP2

Nếu gem pristine --allcó vấn đề về sự cho phép, bạn nên kiểm tra which ruby. brew link --overwrite ruby && source ~/.bash_profilevà chạy gem pristine --allcó thể giúp
Chris Yim

Không có giải pháp nào trong số đó đang làm việc cho tôi và tôi có vấn đề tương tự.
Alex Cohen

19

Tôi gặp vấn đề này và làm theo tất cả các lệnh tương tự như trên, thậm chí còn đi xa hơn để loại bỏ tất cả các phiên bản Ruby đã cài đặt trước đó của tôi. Tuy nhiên, lỗi vẫn tồn tại.

Hóa ra, có một số đá quý còn sót lại cho các phiên bản khác nhau (đã được gỡ cài đặt trước đó) ~/.gem/ruby/. Sau khi xóa các thư mục tôi không còn sử dụng, các lỗi biến mất.


2
Điều này đã làm điều đó cho tôi. rm -rf. Trước đây tôi đã cố gắng cài đặt tất cả các viên đá quý của mình nhưng không thành công.
StevenNunez

10

Hôm nay tôi cũng gặp vấn đề này và nó bực bội vì tôi không thể gõ được vì toàn bộ trình soạn thảo của tôi nhấp nháy màu đỏ với thông báo lỗi.

Tôi không hoàn toàn chắc chắn chính xác điều gì đã gây ra nhưng tôi tin rằng vì chúng tôi có nhiều phiên bản ruby ​​HOẶC nhiều trình quản lý phiên bản ruby được cài đặt và chúng ghi đè lên nhau và làm rối tung đường dẫn của bạn tới các viên đá quý.

Các gemlệnh cũng được ghi đè khi bạn có rbenv và RVM.

Xem những cái bạn đã cài đặt bằng cách gõ;

which rvm
which rbenv
which chruby

Nếu một trong số chúng được cài đặt, nó sẽ trả về một đường dẫn. Sau đó xóa chúng, đảm bảo dọn sạch hoàn toàn tất cả các thư mục và bắt đầu với một cài đặt sạch.


Tẩy

Đây là những gì tôi đã làm cho rvm ;

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

Đây là những gì tôi đã làm cho rbenv

Lần đầu tiên cài đặt https://github.com/meowsus/rbenv-clean , sau đó

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

Cài đặt lại

Sau đó, bạn có một thư mục nhà sạch để làm việc. Tôi đã kết hợp lại rbenv với Cách cài đặt Ruby 2.1.4 trên Ubuntu 14.04 . Và cuối cùng;

rbenv rehash

Chỉ cần xóa các nội dung liên quan đến rvm đã khắc phục sự cố này cho tôi trên macOS
neu242

6

Tôi đã làm mọi thứ được đề cập ở trên bao gồm cả

  • chọn xcode - cài đặt
  • cài đặt lại ruby
  • cài đặt lại tất cả đá quý
  • đá quý nguyên sơ --all

nhưng vấn đề là như vậy đối với tôi Tôi vừa khởi động lại máy Mac của mình như hy vọng cuối cùng và các thông báo cảnh báo đã biến mất.

Thật kỳ lạ, nhưng nếu bất cứ ai đang vật lộn với vấn đề này sau khi thử mọi thứ trên StackOverflow, hãy thử khởi động lại máy của bạn.


4
Cảm ơn đã chia sẻ mẹo khởi động lại. Tôi đã gặp vấn đề tương tự, trên máy Mac và có thể giải quyết chỉ bằng cách bắt đầu phiên cuối mới.
Libby

3

Nếu bạn đã cài đặt RVM, có thể bạn đang gặp lỗi vì bạn đã cài đặt các phiên bản khác nhau.

Kiểm tra và loại bỏ các phiên bản vô dụng, nhưng tôi nghĩ rằng đây không phải là cách tiếp cận tốt . Dù sao cũng đã hết lỗi.

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

Sau khi làm mới cocoapods, nên tiêm vào .rvm GEM_HOME

gem uninstall cocoapods
gem install cocoapods

Có lẽ pod COMMANDsẽ ném lỗi về minitestđá quý, vì vậy -gem install minitest


2

TL; DR - Đá quý Ruby không thích Rubies chạy từ symlink hoặc di chuyển từ nơi chúng được xây dựng (vì các shebang nhúng)

Nếu thư mục Ruby được gọi hoặc vars môi trường trỏ đến thư mục symlink'ed hoặc được sao chép hoặc đổi tên, thông báo này có khả năng. Tôi đang sử dụng chruby và được liên kết tượng trưng /opt/rubies/-> /usr/local/ruby/, nhưng logic tìm kiếm thư viện động của Ruby không hoạt động tốt với điều này.

Giải pháp trong trường hợp của tôi là thay thế symlink bằng ruby ​​thực tế /opt/rubies/và chạy gem pristine --alltrong mỗi Ruby. Đối với những người khác sử dụng RVM hoặc Rbenv, chúc may mắn với điều đó mà không phải bắt đầu lại từ đầu.

Đây có thể không phải là vấn đề chính xác của bạn, nhưng hy vọng nó sẽ giúp.


1
Nó bật ra là chạy gem pristine --alltrên tất cả các phần của họ. Cảm ơn vì đã hồi sinh câu hỏi chết này. Tôi đã gần như chỉ đốt cháy tất cả và bắt đầu lại.
Phillip Longman

2

Thêm hương vị của riêng tôi ở đây. Tôi sử dụng rbenvđược cài đặt qua Homebrew và nhận được bốn trong số các thông báo "bỏ qua ... tiện ích mở rộng không được xây dựng" này. Đặc biệt:

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

Tôi đã thử nhiều thứ trong chủ đề này mà không có may mắn. Cuối cùng, trong trường hợp của tôi, tôi đã làm:

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

Tại thời điểm này tôi vẫn nhận được lỗi, nhưng bây giờ tôi chỉ có một phiên bản Ruby duy nhất để giải quyết:

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

Tại thời điểm này tôi đã thử sudo gem pristine --allnhưng đã bị từ chối cấp quyền trên thư mục Gems của hệ thống.

Vì vậy, tôi đã đi qua và chạy nguyên sơ trên từng viên đá quý, như

sudo gem pristine bcrypt --version 3.1.12 (Vân vân)

Và cuối cùng các lỗi đã biến mất.


1

Đây là một chủ đề cũ, nhưng tôi chỉ gặp vấn đề này bản thân mình.

Bạn không cần phải khởi động lại máy, bạn chỉ cần làm mới môi trường của mình, bạn có thể thực hiện việc này bằng lệnh khởi động lại:

rehash

Từ trang người đàn ông: 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
Bạn đang nói về hệ điều hành nào?
rbanffy

rehashhoặc hash -rcho bash là một lệnh shell có sẵn trên * nix. Khi shell C khởi động, nó xây dựng một bảng băm của tất cả các lệnh trong đường dẫn của nó: mỗi tên lệnh và tên đường dẫn tuyệt đối của nó. Vì vậy, sau khi bạn bắt đầu chạy csh, nếu các chương trình mới được thêm vào các thư mục dọc theo đường dẫn, bạn cần sử dụng lệnh Rehash của shell để xây dựng lại bảng băm của nó. (cf: docstore.mik.ua/orelly/unix3/upt/ch27_06.htm )
yacc

1

Tôi gặp vấn đề này nhưng chỉ khi tôi bắt đầu tmuxsử dụng phiêntmuxinator .

Hóa ra đó là vì tôi đang sử dụng tmuxinatortừ brewthay vì cài đặt nó sử dụng gem install. Có thể sử dụng chrubycùng một lúc cũng góp phần vào vấn đề.

p / s: Tôi cũng đã loại bỏ viên ruby ​​chưa sử dụng khỏi ~/.gem/rubynhưng tôi nghi ngờ đó là lý do vấn đề này đã được giải quyết cho tôi.


1

Chạy gem pristine --alllúc đầu không giúp được gì, nhưng sau đó tôi nhận ra: kịch bản tôi đang chạy bắt đầu bằng dòng:

#!/usr/bin/ruby

Trên hệ thống macOS của tôi (Catalina, nhưng tôi không nghĩ nó quan trọng), điều này chỉ ra Ruby đi kèm với hệ thống, chứ không phải hệ thống được cài đặt bởi RVM. Đang chạygem pristine --all đang sửa lỗi cài đặt RVM, nhưng tập lệnh của tôi đang gọi một phiên bản khác của Ruby.

Cách khắc phục đối với tôi là sử dụng envlệnh để gọi bất kỳ Ruby nào được chỉ định trong shell hiện tại PATH. Thay đổi dòng trên cùng của tập lệnh thành cái này đã sửa nó:

#!/usr/bin/env ruby


Chỉ xảy ra với tôi - cảm ơn! Điều đó có nghĩa là đã bundle installcài đặt các viên đá quý (và các phần mở rộng riêng của chúng) cho một viên ruby ​​được chọn thông qua trình chuyển đổi RVM Ruby, trong đó một tập lệnh đề cập đến hệ thống mà Ruby không thể tìm thấy chúng. Giải pháp của bạn là thực hành tiêu chuẩn để làm cho các tập lệnh và đá quý của Ruby hoạt động với các viên ruby ​​do người dùng cài đặt ( xem ).
tanius

Điều này đưa tôi đi đúng hướng! Trong trường hợp của tôi, tôi muốn tmuxinator trở thành một tiện ích (không phải là gói phụ cho một dự án cụ thể), vì vậy tôi đã cài đặt nó trên Ubuntu. Vì vậy, làm apt purge tmuxinatorvà sau đó gem install tmuxinatorlàm cho nó hoạt động. Có lẽ tôi sẽ phải cài đặt nó bất cứ khi nào tôi nâng cấp phiên bản ruby ​​phi dự án của mình, nhưng tôi thích cái này hơn. Cảm ơn!
mê cung

1

Chạy Mac OS Catalina, sản xuất bia và rbenv ...

Đã gặp vấn đề chính xác này ngày hôm nay, và trải qua tất cả các câu trả lời ở đây, cuối cùng tôi tình cờ tìm thấy một lý do khác cho lỗi này:

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

Và tất nhiên đá quý nguyên sơ không có tác dụng.

Vấn đề của tôi là một biến môi trường GEM_HOME và GEM_PATH được mã hóa cứng đã ghi đè lên rbenv.

Vì vậy, hãy kiểm tra xem bạn chưa đặt GEM_PATH và GEM_HOME trong ~ / .zshrc



0

Tôi đã có cùng một vấn đề và tôi đang sử dụng rbenv. Vì một số lý do, cài đặt rbenv toàn cầu của tôi bị mất. Để khắc phục sự cố này, tôi đã đặt phiên bản toàn cầu thành một trong các phiên bản rbenv của mình ... chẳng hạn:

rbenv toàn cầu 2.5.1


0

Đây cũng là một vấn đề khi bạn đang phát triển trên Mac và sau đó xây dựng hình ảnh Docker: https://forums.aws.amazon.com/thread.jspa?messageID=879802&tstart=0

Khi bạn thực hiện "cài đặt gói - triển khai", trình đóng gói sẽ tạo một thư mục nhà cung cấp với các viên ngọc của bạn trong đó. Lưu ý rằng trong khi điều này bao gồm đá quý của bạn trong thư mục cục bộ, nó sẽ chỉ bao gồm các tiện ích mở rộng gốc cho nền tảng của bạn. Như bạn đang trên macOS, đây sẽ là Darwin. Bạn sẽ cần phải lặp lại quy trình trên môi trường linux 64 bit x86.


0

Đề nghị của Libby chỉ bắt đầu một phiên cuối mới (mà cô ấy nhận xét về câu trả lời của Sebastian Kim) đã làm việc cho tôi. Nhanh hơn nhiều so với bất kỳ ai khác nữa vì vậy tôi muốn làm cho nó một câu trả lời để nó được hiển thị nhiều hơn.


0

Trong trường hợp của tôi, tôi đã cố chạy pristine --allnhưng tôi đã nhận được:

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) 

Sau đó, tôi đã xóa nội dung Users/{{user.name}}⁩/⁨.gem⁩sau đó khi tôi cần chạy bundle install --force, nó đã cài đặt lại mọi thứ, sau đó lệnh pristine --allhoạt động như mong đợi


0

Giải pháp này hiệu quả với tôi cho RubyMine IntelliJ

Tôi đã có hai thiết bị đầu cuối khác nhau được sử dụng RVMruby<Version>.

Giải pháp:

Tôi đã phải chuyển nó sang phiên bản RVM để các lỗi biến mất Preferences>Languages&Frameworks>Ruby SDK

Lỗi:

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

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.