Gỡ cài đặt tất cả các đá quý đã cài đặt, trong OSX?


177

Có những trường hợp tôi muốn hoàn nguyên và gỡ cài đặt tất cả các cài đặt đá quý trước đó.

Chẳng hạn, tôi cần hỗ trợ một người bạn di chuyển máy phát triển đường ray của họ để sử dụng RVM. Vì trước đây họ đã sử dụng toàn hệ thống gem, anh ta đã trải qua nhiều vấn đề đau đầu khi làm việc với nhiều dự án. Về cơ bản, anh ta là con đẻ của một chuyển đổi RVM.

Làm thế nào tôi có thể gỡ cài đặt một cách tao nhã tất cả các viên đá quý trên hệ thống OSX của anh ấy?


1
Ngày nay điều này là không cần thiết. RVM biết nơi để tìm đá quý sau khi bạn chuyển sang phiên bản Ruby phù hợp.
Franklin Yu

1
yes Y | gem uninstall -a -I
stopanko

Chỉ cần một ghi chú nhanh cho @FranklinYu - điều này không phải lúc nào cũng đúng. Tôi đã có những trường hợp mà một bản sao Nokogiri được cài đặt trên toàn cầu dường như luôn luôn là tiền lệ đối với đá quý RVM, và bản sao toàn cầu phải được gỡ cài đặt.
Nathan Crause

@NathanCrause Sau đó, đó là một lỗi trong RVM và cần được báo cáo. Tôi khá chắc chắn đây không phải là hành vi dự định của RVM.
Franklin Yu

@FranklinYu bạn đúng, nhưng cho đến khi vấn đề như vậy được giải quyết, vẫn sẽ cần một cách để thanh lọc tất cả đá quý. Tôi chỉ đề cập đến vấn đề là "không cần thiết", điều này sẽ đúng trong một tình huống lý tưởng, nhưng này, mọi thứ luôn đi ngang.
Nathan Crause

Câu trả lời:


427

Rubygems> = 2.1.0

gem uninstall -aIx

axóa tất cả các phiên bản
Ibỏ qua các phụ thuộc
xbao gồm thực thi

Rubgems <2.1.0

for i in `gem list --no-versions`; do gem uninstall -aIx $i; done

1
Duh, bạn đã đánh bại tôi với tốc độ :)
Romain

3
Sau đó, tất nhiên, bạn sẽ muốn cài đặt lại một danh sách các loại đá quý mặc định mà theo tôi là: "gem install bundler json minitest rakerdoc"
Wil Moore III

5
danh sách đá quý | cắt -d "" -f1 | sudo xargs gem gỡ cài đặt -Iax -worked for me
lesyk

5
Không hoạt động: ERROR: While executing gem ... (Gem::InstallError) gem "test-unit" cannot be uninstalled because it is a default gem (gem 2.0.3)
M. Anthony Aiello

@Anthony Mặc dù điều này hơi nguy hiểm, bạn có thể khắc phục lỗi vớifor i in `gem list --no-versions`; do gem uninstall -aIx $i 2>/dev/null; done
Darren Cheng

46

Bạn cũng có thể xây dựng một Gemfile mới và chạy bundle clean --force. Điều này sẽ loại bỏ tất cả các loại đá quý khác không có trong Gemfile mới.


3
Điều này rất hữu ích :)
user1190286

1
câu trả lời tốt nhất vì đơn vị kiểm tra không thể được gỡ cài đặt và giết chết quá trình.
westonplatter

2
Vâng, đây là câu trả lời tốt nhất. Tôi cảm thấy OP nên chọn bài này 2.0.0.
theTuxRacer

2
Điều này chắc chắn làm việc cho tôi và thanh lịch hơn nhiều so với các phiên bản khác
Crispen Smith

29

Một phiên bản khác nhau thấp nhất, bỏ qua bước cắt, tận dụng tùy chọn '--no-version':

gem list --no-version |xargs gem uninstall -ax

Vì bạn đang xóa mọi thứ, tôi không thấy sự cần thiết cho tùy chọn 'Tôi'. Bất cứ khi nào đá quý được gỡ bỏ, nó là tốt.


1
sudokhông cần thiết nếu đá quý được cài đặt bởi người dùng thông thường.
sampablokuper

Xem câu trả lời của tôi cho một lý do tại sao tôi hạ cấp. Tôi muốn bình luận ở đây nhưng bình luận không cho phép dòng ...
aercolino

tốt, có thể loại bỏ rất nhiều đá quý, nhưng một cái gì đó không giống như bó, cào, rvm
tuyệt nhất

Rất thanh lịch nhưng thất bại do không thể loại bỏ đá quý mặc định. Thay vào đó, hãy đề xuất giải pháp của crftr
Freedom_Ben 18/03/2015

11

Trước tiên hãy đảm bảo bạn có ít nhất phiên bản đá quý 2.1.0

gem update --system
gem --version
# 2.6.4

Để gỡ cài đặt, chỉ cần chạy:

gem uninstall --all

Bạn có thể cần phải sử dụng sudolệnh:

sudo gem uninstall --all

10

Sử dụng

$ gem list --no-version | xargs gem uninstall -ax

hoặc là

$ sudo gem list --no-version | xargs sudo gem uninstall -ax

Tùy thuộc vào những gì bạn muốn, bạn có thể cần phải thực thi cả hai, vì "danh sách đá quý" và "danh sách đá quý sudo" cung cấp danh sách độc lập.

Không trộn "danh sách đá quý" bình thường với "gỡ cài đặt đá quý" sudo-ed hoặc cách khác nếu không bạn có thể gỡ cài đặt đá quý đã cài đặt sudo (trước đây) hoặc gặp nhiều lỗi (sau này).


Bạn nói đúng, tôi đã chỉnh sửa câu trả lời của mình để loại trừ sudo. Đối với cả hai phiên bản, người dùng có thể dựa vào câu trả lời của bạn.
Thiago Ganzarolli

9

Nếu bạn đang sử dụng Rubygems phiên bản 2.1.0 trở lên, bạn có thể thử : gem uninstall --all.


3
Nó phải là "đá quý" chứ không phải "đá quý".
thu thập

6

Nếu bạn thích làm điều đó bằng ruby:

ruby -e "`gem list`.split(/$/).each { |line| puts `gem uninstall -Iax #{line.split(' ')[0]}` unless line.strip.empty? }"

Chúc mừng


Tôi đang gặp lỗi với điều này: LRI: Trong khi thực hiện gem ... (Gem :: CommandLineError) Vui lòng chỉ định ít nhất một tên đá quý (ví dụ: gem build GEMNAME)
mbdev

1
@mbdev Đã sửa, hehe cung cấp hỗ trợ cho câu trả lời của tôi trên Stack Overflow :)
Haris Krajina

Điều này rất hữu ích vì nó hoạt động trong Windows nơi vỏ lệnh ... không tốt.
AdamC

5

Rubygems> = 2.1.0

gem uninstall -aIx

Nếu Terminal trả về lỗi dưới đây

ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

Sau đó viết lệnh trên như dưới đây

sudo gem uninstall -aIx

Và nhập mật khẩu tài khoản mac os của bạn Xong !!


5

Và đối với những người ở đây vì bạn muốn loại bỏ tất cả các loại đá quý với một tiền tố nhất định ( ahem tôi đang nhìn bạn aws-sdk!) Bạn có thể chạy một cái gì đó như thế này:

gem list --no-version | grep "aws-sdk-" | xargs gem uninstall -aIx

Rõ ràng đặt trong truy vấn của bạn thay vì aws-sdk-. Bạn cần -Itrong đó để bỏ qua phụ thuộc.

Hình thức thông qua câu trả lời trước đó của Ando


4

Lệnh duy nhất giúp tôi dọn sạch tất cả các loại đá quý và bỏ qua các loại đá quý mặc định, không thể gỡ cài đặt

for x in `gem list --no-versions`; do gem uninstall $x -a -x -I; done

2

Tôi đã làm điều đó cách đây không lâu (cùng một tình huống chuyển đổi RVM trẻ em):

gem list | cut -d" " -f1 | sudo xargs gem uninstall -Iax

Lấy danh sách tất cả các loại đá quý (bao gồm các công cụ phiên bản), cắt nó để chỉ giữ lại tên đá quý, sau đó gỡ cài đặt tất cả các phiên bản của các loại đá quý đó.

Điều sudonày chỉ hữu ích nếu bạn có đá quý được cài đặt trên toàn hệ thống và không được bao gồm trừ khi cần thiết.


1

Khi cố gắng xóa đá quý được cài đặt dưới quyền root, xargs dường như dừng lại khi gặp lỗi khi cố gắng gỡ cài đặt đá quý mặc định:

sudo gem list | cut -d" " -f1 | xargs gem uninstall -aIx
# ERROR:  While executing gem ... (Gem::InstallError)
#    gem "test-unit" cannot be uninstalled because it is a default gem


Điều này sẽ không làm việc cho tất cả mọi người, nhưng đây là những gì tôi đã sử dụng thay thế:

sudo for gem (`gem list | cut -d" " -f1`); do gem uninstall $gem -aIx; done

1
gem list --no-version | grep -v -e 'psych' -e 'rdoc' -e 'openssl' -e 'json' -e 'io-console' -e 'bigdecimal' | xargs sudo gem uninstall -ax

grep ở đây không bao gồm đá quý mặc định. Tất cả các đá quý khác sẽ được gỡ cài đặt. Bạn cũng có thể đi trước nó sudotrong trường hợp bạn gặp vấn đề về sự cho phép.

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.