Yüklü tüm taşlar OSX'te kaldırılsın mı?


177

Önceki tüm mücevher kurulumlarını geri almak ve kaldırmak istediğim durumlar var.

Örneğin, bir arkadaşımın RVM'yi kullanmak için ray geliştirme makinesini geçirmesine yardımcı olmam gerekiyordu. Daha önce sistem genelinde kullandıkları için gem, birden fazla projeyle çalışırken birçok baş ağrısı yaşıyordu . Esasen, bir RVM dönüşümü için poster çocuğuydu.

OSX sistemindeki tüm taşları nasıl zarif bir şekilde kaldırabilirim?


1
Günümüzde bu gereksizdir. RVM, doğru Ruby sürümüne geçtikten sonra mücevherleri nerede arayacağını bilir.
Franklin Yu

1
yes Y | gem uninstall -a -I
stopanko

@FranklinYu'ya hızlı bir not - bu her zaman böyle değildir. Ben Nokogiri bir küresel yüklü kopyası daima RVM gemset üzerinde emsal alarak gibiydi örneklerini aldık ve küresel bir vardı Kaldırılacak.
Nathan Crause

@NathanCrause O zaman RVM bir hata ve rapor edilmelidir. Eminim ki bu RVM'nin amaçlanan davranışı değildir.
Franklin Yu

Haklısın, ama böyle bir sorun çözülünceye kadar, hala tüm mücevherleri temizlemenin bir yoluna ihtiyaç duyulacaktı. Ben sadece bunun "gereksiz" olduğu noktasını kastediyorum, ki bu ideal bir durumda doğru olurdu, ama hey, işler her zaman yanlara gider.
Nathan Crause

Yanıtlar:


428

Yakut Taşlar> = 2.1.0

gem uninstall -aIx

atüm sürümleri kaldırır
Ibağımlılıkları yok sayılır
xçalıştırılabilir içerir

Rubgems <2.1.0

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

1
Duh, beni hıza vurdun :)
Romain

3
Sonra tabii ki, benim için varsayılan mücevher aklı başında listesini yeniden yüklemek isteyeceksiniz: "gem install bundler json en az komisyon rdoc"
Wil Moore III

5
mücevher listesi | kes -d "" -f1 | sudo xargs taş kaldırma -Iax-benim için
çalıştı

5
Çalışmıyor: ERROR: While executing gem ... (Gem::InstallError) gem "test-unit" cannot be uninstalled because it is a default gem(mücevher 2.0.3)
M. Anthony Aiello

@Anthony Bu biraz tehlikeli olsa da, hataları bastırabilirsinizfor i in `gem list --no-versions`; do gem uninstall -aIx $i 2>/dev/null; done
Darren Cheng

46

Ayrıca yeni bir Gemfile oluşturabilir ve koşabilirsiniz bundle clean --force. Bu, yeni Gemfile'da bulunmayan diğer tüm taşları kaldıracaktır.


3
Bu çok yararlı :)
user1190286

1
en iyi yanıt, çünkü test ünitesi kaldırılamaz ve işlemi öldüremez.
westonplatter

2
Evet, bu en iyi cevap. OP'nin bu yazıyı 2.0.0 seçmesi gerektiğini düşünüyorum.
theTuxRacer

2
Bu kesinlikle benim için çalışıyor ve diğer versiyonlardan çok daha zarif
Crispen Smith

29

'--No-version' seçeneğinden yararlanarak kesme adımını atlayan en farklı farklı bir sürüm:

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

Her şeyi kaldırdığınız için 'I' seçeneğine ihtiyaç duymuyorum. Mücevher kaldırıldığında, sorun yok.


1
sudotaşlar sıradan bir kullanıcı tarafından kurulmuşsa gerekli olmamalıdır.
sampablokuper

Cevabımı aşağı indirmemin bir nedeni için görün. Burada yorum yapmak istedim ama yorumlar satırlara izin vermiyor ...
aercolino

iyi, çok sayıda taşı kaldırabilir, ancak paket, tırmık, rvm gibi bir şey dozlanmamış
2'de serinletme

Çok zarif ancak varsayılan mücevherleri kaldıramadığından başarısız oluyor. Yerine crftr en çözümünü öner
Freedom_Ben

11

Öncelikle en azından mücevher 2.1.0 sürümüne sahip olduğunuzdan emin olun

gem update --system
gem --version
# 2.6.4

Kaldırmak için şunu çalıştırın:

gem uninstall --all

Şunu kullanmanız gerekebilir: sudoKomutu :

sudo gem uninstall --all

10

Either "kalıbını kullanınız

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

veya

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

Ne istediğinize bağlı olarak, "gem list" ve "sudo gem list" bağımsız listeler sağladığı için her ikisini de yürütmeniz gerekebilir.

Normal bir "değerli taş listesini" bir sudo-ed "değerli taş kaldırmasıyla" veya başka bir yolla karıştırmayın, aksi takdirde sudo yüklü mücevherleri (eski) veya çok sayıda hatayı (sonuncuyu) kaldırabilirsiniz.


Haklısın, sudo'yu dışlamak için cevabımı düzenledim. Her iki sürüm için de kullanıcılar cevabınıza güvenebilir.
Thiago Ganzarolli

9

Eğer RubyGems sürüm 2.1.0 veya sonrası kullanıyorsanız, şunları deneyebilirsiniz: gem uninstall --all.


3
Bu 'mücevher' değil 'mücevher' olmalıdır.
toplamak

6

Ruby'yi kullanarak yapmayı seviyorsanız:

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

Şerefe


Bununla ilgili bir hata alıyorum: HATA: gem yürütürken ... (Gem :: CommandLineError) Lütfen en az bir mücevher adı belirtin (örn. Gem yapı GEMNAME)
mbdev

1
@mbdev Çözüldü, hehe Stack Overflow hakkındaki cevaplarıma destek veriyor :)
Haris Krajina

Bu, komut kabuğunun iyi olmadığı Windows'da çalıştığı için kullanışlıdır.
AdamC

5

Yakut Taşlar> = 2.1.0

gem uninstall -aIx

Terminal hatanın altına dönerse

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

Sonra yukarıdaki komutu aşağıdaki gibi yazın

sudo gem uninstall -aIx

Ve mac os hesap şifrenizi girin Bitti !!


5

Ve burada olanlarınız için tüm mücevherleri belirli bir önekle kaldırmak istediğiniz için ( ahem sana aws-sdk! 'A bakıyorum) şöyle bir şey çalıştırabilirsiniz:

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

Açıkçası yerine sorgunuzu koyun aws-sdk-. -IBağımlılıkları görmezden gelmek için orada ihtiyacınız var.

Ando'nun daha önceki cevabı kabul edildi


4

Tek komut tüm taşları temizlememe yardımcı oldu ve kaldırılamayan varsayılan taşları yok sayar

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

2

Bunu çok uzun zaman önce yapmadım (aynı poster-çocuk RVM değiştirici durumu):

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

Tüm mücevherlerin listesini alır (sürüm öğeleri dahil), sadece mücevher adını tutmak için keser, ardından bu mücevherlerin tüm sürümlerini kaldırır.

sudoEğer taşlar sistem genelinde yüklemiş olduğu ve gerekli olmadığı sürece dahil edilmemelidir eğer sadece yararlıdır.


1

Kök olarak yüklü mücevherleri kaldırmaya çalışırken, xargs varsayılan bir taşı kaldırmaya çalışırken bir hatayla karşılaştığında durmuş gibi görünüyor:

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


Bu herkes için işe yaramaz, ancak bunun yerine kullandığım şey:

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 burada varsayılan mücevherleri hariç tutuyor. Diğer tüm taşlar kaldırılacak. sudoİzin sorunlarıyla karşılaşmanız durumunda da önüne geçebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.