Odinstaluj wszystkie zainstalowane klejnoty w OSX?

177

Są przypadki, w których chciałbym cofnąć i odinstalować wszystkie poprzednie instalacje klejnotów.

Na przykład musiałem pomóc przyjacielowi w migracji maszyny do tworzenia szyn do używania RVM. Ponieważ wcześniej korzystali z systemu w całym systemie gem, doświadczał wielu bólów głowy podczas pracy z wieloma projektami. Zasadniczo był dzieckiem-plakatem dla konwertowanego RVM.

Jak mogę elegancko odinstalować wszystkie klejnoty z jego systemu OSX?

crftr
źródło
1
Obecnie jest to niepotrzebne. RVM wie, gdzie szukać klejnotów po przełączeniu się na właściwą wersję Rubiego.
Franklin Yu
1
yes Y | gem uninstall -a -I
stopanko
Krótka notatka do @FranklinYu - nie zawsze tak jest. Miałem przypadki, w których globalnie zainstalowana kopia Nokogiri wydawała się zawsze mieć pierwszeństwo przed zestawem gemset RVM, a globalna musiała zostać odinstalowana.
Nathan Crause
@NathanCrause Zatem jest to błąd w RVM i powinien zostać zgłoszony. Jestem prawie pewien, że nie jest to zamierzone zachowanie RVM.
Franklin Yu
@FranklinYu masz rację, ale dopóki ten problem nie zostanie rozwiązany, nadal będzie potrzebny sposób na oczyszczenie wszystkich klejnotów. Mówiłem tylko o tym, że jest to „niepotrzebne”, co byłoby prawdą w idealnej sytuacji, ale hej, sprawy cały czas toczą się na boki.
Nathan Crause

Odpowiedzi:

427

Rubygems> = 2.1.0

gem uninstall -aIx

ausuwa wszystkie wersje
Iignoruje zależności, w
xtym pliki wykonywalne

Rubgems <2.1.0

for i in `gem list --no-versions`; do gem uninstall -aIx $i; done
crftr
źródło
1
Duh, pokonałeś mnie do rozpędu :)
Romain
3
Wtedy oczywiście będziesz chciał ponownie zainstalować rozsądną listę domyślnych klejnotów, która dla mnie brzmi: "gem install bundler json minitest rake rdoc"
Wil Moore III
5
lista klejnotów | wytnij -d "" -f1 | sudo xargs gem uninstall -Iax -worked for me
lesyk
5
Nie działa: 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 Chociaż jest to trochę niebezpieczne, możesz wyeliminować błędy za pomocąfor i in `gem list --no-versions`; do gem uninstall -aIx $i 2>/dev/null; done
Darren Cheng
46

Możesz także zbudować nowy plik Gemfile i uruchomić bundle clean --force. Spowoduje to usunięcie wszystkich innych klejnotów, których nie ma w nowym pliku klejnotów.

bswinnerton
źródło
3
Jest to bardzo przydatne :)
user1190286
1
najlepsza odpowiedź, ponieważ nie można odinstalować jednostki testowej i zabija proces.
westonplatter,
2
Tak, to najlepsza odpowiedź. Uważam, że OP powinien wybrać ten post 2.0.0.
theTuxRacer
2
To z pewnością działa dla mnie i jest znacznie bardziej eleganckie niż inne wersje
Crispen Smith,
29

Najmniejsza inna wersja, pomijająca krok cięcia, wykorzystująca opcję „--no-version”:

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

Ponieważ usuwasz wszystko, nie widzę potrzeby opcji „ja”. Jeśli klejnot zostanie usunięty, wszystko jest w porządku.

Thiago Ganzarolli
źródło
1
sudonie powinno być konieczne, jeśli klejnoty zostały zainstalowane przez zwykłego użytkownika.
sampablokuper
Zobacz moją odpowiedź z powodu, dla którego zagłosowałem. Chciałem skomentować tutaj, ale komentarze nie pozwalają na linie ...
aercolino
dobrze, może usunąć wiele klejnotów, ale coś nie jest takie jak pakiet, rake, rvm
fajne testy z
Bardzo elegancki, ale zawodzi ze względu na brak możliwości usunięcia domyślnych klejnotów. Zaproponuj zamiast tego rozwiązanie
crftr
11

Najpierw upewnij się, że masz co najmniej gem w wersji 2.1.0

gem update --system
gem --version
# 2.6.4

Aby odinstalować, po prostu uruchom:

gem uninstall --all

Może być konieczne użycie sudopolecenia:

sudo gem uninstall --all
zbierać
źródło
10

Użyj albo

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

lub

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

W zależności od tego, co chcesz, może być konieczne wykonanie obu, ponieważ „lista klejnotów” i „lista klejnotów sudo” zapewniają niezależne listy.

Nie mieszaj zwykłej „listy klejnotów” z sudo-ed „deinstalacją klejnotów” ani odwrotnie, w przeciwnym razie możesz skończyć odinstalowaniem klejnotów zainstalowanych w sudo (pierwszy) lub uzyskać wiele błędów (drugi).

aercolino
źródło
Masz rację, zredagowałem moją odpowiedź, aby wykluczyć sudo. W przypadku obu wersji użytkownicy mogą polegać na Twojej odpowiedzi.
Thiago Ganzarolli
9

Jeśli używasz rubygems wersji 2.1.0 lub nowszej, można spróbować: gem uninstall --all.

rrrub
źródło
3
Powinien to być „klejnot”, a nie „klejnoty”.
odbierz
6

Jeśli lubisz to robić używając ruby:

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

Twoje zdrowie

Haris Krajina
źródło
Otrzymuję błąd z tym: BŁĄD: Podczas wykonywania gem ... (Gem :: CommandLineError) Proszę podać przynajmniej jedną nazwę gem (np. Gem build GEMNAME)
mbdev
1
@mbdev Naprawiono, hehe zapewnia wsparcie dla moich odpowiedzi na przepełnienie stosu :)
Haris Krajina
Jest to przydatne, ponieważ działa w systemie Windows, w którym powłoka poleceń jest ... niedobra.
AdamC
5

Rubygems> = 2.1.0

gem uninstall -aIx

Jeśli Terminal zwróci poniżej błąd

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

Następnie napisz powyższe polecenie, jak poniżej

sudo gem uninstall -aIx

I wprowadź hasło do konta Mac OS Gotowe !!

Kirtikumar A.
źródło
5

A dla tych z was, którzy są tutaj, ponieważ chcą usunąć wszystkie klejnoty z określonym prefiksem ( ahem patrzę na ciebie aws-sdk!), Możesz uruchomić coś takiego:

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

Oczywiście zamiast tego wpisz zapytanie aws-sdk-. Potrzebujesz -Itam, aby zignorować zależności.

Przyjęte z wcześniejszej odpowiedzi Ando

Trevor Elwell
źródło
4

Jedyne polecenie pomogło mi wyczyścić wszystkie klejnoty i ignoruje domyślne klejnoty, których nie można odinstalować

for x in `gem list --no-versions`; do gem uninstall $x -a -x -I; done
Attenzione
źródło
2

Zrobiłem to nie tak dawno temu (ta sama sytuacja przełącznika RVM z plakatem):

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

Pobiera listę wszystkich klejnotów (łącznie z wersjami), przycina ją, aby zachować tylko nazwę klejnotu, a następnie odinstalowuje wszystkie wersje takich klejnotów.

Jest sudoto przydatne tylko wtedy, gdy masz zainstalowane klejnoty w całym systemie i nie powinno być dołączane, chyba że jest to konieczne.

Romain
źródło
1

Podczas próby usunięcia klejnotów zainstalowanych jako root, xargs wydaje się zatrzymywać, gdy napotka błąd podczas próby odinstalowania domyślnego klejnotu:

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


To nie zadziała dla wszystkich, ale oto, czego użyłem:

sudo for gem (`gem list | cut -d" " -f1`); do gem uninstall $gem -aIx; done
Zaz
źródło
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 wyklucza tutaj domyślne klejnoty. Wszystkie inne klejnoty zostaną odinstalowane. Możesz również poprzedzić go ciągiem sudow przypadku problemów z uprawnieniami.

moeabdol
źródło