Удалить все установленные драгоценные камни, в OSX?

177

Есть случаи, когда я хотел бы отменить и удалить все предыдущие установки gem.

Например, мне нужно было помочь другу перевести свою машину для разработки рельсов на использование RVM. Поскольку они ранее использовали общесистемную систему gem, он испытывал много головной боли при работе с несколькими проектами. По сути, он был ребенком-постером для новообращенного RVM.

Как я могу элегантно удалить все драгоценные камни в его системе OSX?

crftr
источник
1
В наше время это не нужно. RVM знает, где искать драгоценные камни после перехода на правильную версию Ruby.
Франклин Ю
1
yes Y | gem uninstall -a -I
стопанко
Просто небольшое примечание к @FranklinYu - это не всегда так. У меня были случаи, когда глобально установленная копия Nokogiri, казалось, всегда имела прецедент над набором гемов RVM, и глобальный должен был быть удален.
Натан Крауз
@NathanCrause Тогда это ошибка в RVM, о которой нужно сообщить. Я почти уверен, что это не так, как RVM.
Франклин Ю
@FranklinYu вы правы, но до тех пор, пока такая проблема не будет решена, все равно будет необходимость в способе очистки всех драгоценных камней. Я имел в виду только то, что это было «ненужным», что было бы правдой в идеальной ситуации, но эй, все время идет вбок.
Натан Крёз

Ответы:

428

Rubygems> = 2.1.0

gem uninstall -aIx

aудаляет все версии
Iигнорирует зависимости
xвключает в себя исполняемые файлы

Rubgems <2.1.0

for i in `gem list --no-versions`; do gem uninstall -aIx $i; done
crftr
источник
1
Дух, ты побил меня до скорости :)
Ромен
3
Тогда, конечно, вы захотите переустановить вменяемый список драгоценных камней по умолчанию, который для меня: «сборщик гемов json minitest rake rdoc»
Wil Moore III
5
список драгоценных камней | cut -d "" -f1 | sudo xargs gem uninstall -Aax -работала для меня
lesyk
5
Не работает: ERROR: While executing gem ... (Gem::InstallError) gem "test-unit" cannot be uninstalled because it is a default gem(драгоценный камень 2.0.3)
М. Энтони Айелло
@Anthony Хотя это немного опасно, вы можете подавлять ошибки сfor i in `gem list --no-versions`; do gem uninstall -aIx $i 2>/dev/null; done
Даррен Ченг
46

Вы также можете создать новый Gemfile и запустить bundle clean --force. Это удалит все другие драгоценные камни, которые не включены в новый Gemfile.

bswinnerton
источник
3
Это очень полезно :)
user1190286
1
лучший ответ, потому что тест-блок не может быть удален и убивает процесс.
Уэстонплаттер
2
Да, это лучший ответ. Я чувствую, что OP должен выбрать этот пост 2.0.0.
theTuxRacer
2
Это, безусловно, работает для меня и гораздо более элегантно, чем другие версии
Криспен Смит
29

Самая простая версия, пропуская шаг вырезания, используя опцию --no-version:

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

Поскольку вы все удаляете, я не вижу необходимости в опции «Я». Всякий раз, когда камень удаляется, это нормально.

Тьяго Ганзаролли
источник
1
sudoне должно быть необходимости, если драгоценные камни были установлены обычным пользователем.
Сампаблокупер
Смотрите мой ответ по причине, почему я понизил. Я хотел бы прокомментировать здесь, но комментарии не допускают строк ...
aercolino
хорошо, может удалить много драгоценных камней, но что-то не похоже на связку, грабли, rvm
самое крутое
Очень элегантно, но не удается из-за невозможности удалить драгоценные камни по умолчанию. Вместо этого предложите решение crftr
Freedom_Ben
11

Сначала убедитесь, что у вас есть хотя бы версия gem 2.1.0

gem update --system
gem --version
# 2.6.4

Чтобы удалить, просто запустите:

gem uninstall --all

Вам может понадобиться использовать sudoкоманду:

sudo gem uninstall --all
Collect
источник
10

Используйте либо

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

или

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

В зависимости от того, что вы хотите, вам может потребоваться выполнить оба, потому что «список драгоценных камней» и «список драгоценных камней sudo» предоставляют независимые списки.

Не смешивайте обычный «список драгоценных камней» с sudo-ed «gem uninstall» и наоборот, иначе вы можете в конечном итоге удалить установленные sudo гемы (прежние) или получить много ошибок (последних).

aercolino
источник
Вы правы, я отредактировал свой ответ, чтобы исключить sudo. Для обеих версий пользователи могут положиться на ваш ответ.
Тьяго Ганзаролли
9

Если вы используете RubyGems версии 2.1.0 или более поздней версии, вы можете попробовать: gem uninstall --all.

rrrub
источник
3
Это должен быть «драгоценный камень», а не «драгоценный камень».
собирать
6

Если вам нравится делать это с помощью ruby:

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

ура

Харис Краина
источник
Я получаю сообщение об ошибке: ERROR: при выполнении gem ... (Gem :: CommandLineError) Пожалуйста, укажите хотя бы одно имя gem (например, gem build GEMNAME)
mbdev
1
@mbdev Исправлено, хе-хе, предоставляя поддержку моим ответам о переполнении стека :)
Харис Краина
Это удобно тем, что работает в Windows, где командная оболочка ... не годится.
AdamC
5

Rubygems> = 2.1.0

gem uninstall -aIx

Если Терминал возвращается ниже ошибки

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

Затем напишите команду выше, как показано ниже

sudo gem uninstall -aIx

И введите пароль своей учетной записи Mac OS Готово!

Киртикумар А.
источник
5

И для тех из вас, кто находится здесь, потому что вы хотите удалить все драгоценные камни с определенным префиксом ( хм, я смотрю на вас aws-sdk!), Вы можете запустить что-то вроде этого:

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

Очевидно, поставить в свой запрос вместо aws-sdk-. Вам нужно -Iтам, чтобы игнорировать зависимости.

Принял форму Ando более ранний ответ

Тревор Элвелл
источник
4

Единственная команда помогла мне очистить все драгоценные камни и игнорирует драгоценные камни по умолчанию, которые не могут быть удалены

for x in `gem list --no-versions`; do gem uninstall $x -a -x -I; done
Attenzione
источник
2

Я сделал это не так давно (та же ситуация с RVM-переключателем типа «ребенок-постер»):

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

Принимает список всех драгоценных камней (включая версии), вырезает его, сохраняя только имя драгоценного камня, затем удаляет все версии таких драгоценных камней.

Это sudoполезно только в том случае, если у вас установлены гемы в масштабе всей системы, и их не следует включать без необходимости.

Ромен
источник
1

При попытке удалить гемы, установленные как root, xargs останавливается, когда обнаруживает ошибку при попытке удалить гем по умолчанию:

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


Это не будет работать для всех, но вот что я использовал вместо этого:

sudo for gem (`gem list | cut -d" " -f1`); do gem uninstall $gem -aIx; done
Zaz
источник
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 здесь исключает драгоценные камни по умолчанию. Все остальные драгоценные камни будут удалены. Вы также можете предшествовать этому sudoв случае, если у вас возникнут проблемы с разрешением.

moeabdol
источник