Copot semua permata yang terpasang, di OSX?

177

Ada beberapa contoh di mana saya ingin mengembalikan dan menghapus semua instalasi permata sebelumnya.

Misalnya, saya perlu membantu seorang teman memigrasi mesin pengembangan rel mereka untuk menggunakan RVM. Karena mereka sebelumnya menggunakan seluruh sistem gem, ia mengalami banyak sakit kepala ketika bekerja dengan beberapa proyek. Pada dasarnya, dia adalah anak poster untuk seorang RVM yang bertobat.

Bagaimana saya bisa menghapus semua permata dengan elegan di sistem OSX-nya?

crftr
sumber
1
Sekarang ini tidak perlu. RVM tahu ke mana harus mencari permata setelah Anda beralih ke versi Ruby yang tepat.
Franklin Yu
1
yes Y | gem uninstall -a -I
stopanko
Hanya catatan singkat untuk @ FranklinYu - ini tidak selalu terjadi. Aku sudah contoh di mana salinan diinstal secara global dari Nokogiri tampaknya selalu mengambil preseden atas gemset RVM, dan satu global harus harus dihapus.
Nathan Crause
@NathanCrause Maka itu bug di RVM dan harus dilaporkan. Saya cukup yakin ini bukan perilaku yang dimaksudkan RVM.
Franklin Yu
@ FranklinYu Anda benar, tetapi sampai masalah seperti itu diselesaikan, masih akan ada kebutuhan untuk cara membersihkan semua permata. Saya hanya merujuk pada titik itu menjadi "tidak perlu", yang akan benar dalam situasi yang ideal, tapi hei, semuanya berjalan menyamping sepanjang waktu.
Nathan Crause

Jawaban:

427

Rubygems> = 2.1.0

gem uninstall -aIx

amenghapus semua versi
Imengabaikan dependensi
xtermasuk executable

Rubgem <2.1.0

for i in `gem list --no-versions`; do gem uninstall -aIx $i; done
crftr
sumber
1
Duh, Anda mengalahkan saya dengan cepat :)
Romain
3
Maka tentu saja, Anda akan ingin menginstal ulang daftar permata default yang waras bagi saya adalah: "permata instal bundler json minitest rake rdoc"
Wil Moore III
5
daftar permata | cut -d "" -f1 | sudo xargs gem uninstall -Iax -bekerja untuk saya
lesyk
5
Tidak berfungsi: ERROR: While executing gem ... (Gem::InstallError) gem "test-unit" cannot be uninstalled because it is a default gem(permata 2.0.3)
M. Anthony Aiello
@Anthony Meskipun ini agak berbahaya, Anda dapat menekan kesalahan denganfor i in `gem list --no-versions`; do gem uninstall -aIx $i 2>/dev/null; done
Darren Cheng
46

Anda juga bisa membangun Gemfile baru dan lari bundle clean --force. Ini akan menghapus semua permata lain yang tidak termasuk dalam Gemfile baru.

bswinnerton
sumber
3
Ini sangat berguna :)
user1190286
1
jawaban terbaik karena unit tes tidak dapat dihapus dan membunuh prosesnya.
westonplatter
2
Ya, ini jawaban terbaik. Saya merasa OP harus memilih posting ini 2.0.0.
theTuxRacer
2
Ini tentu bekerja untuk saya dan jauh lebih elegan daripada versi lain
Crispen Smith
29

Versi berbeda yang paling sedikit, melewatkan langkah memotong, mengambil keuntungan dari opsi '--tidak ada versi':

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

Karena Anda menghapus semuanya, saya tidak melihat perlunya opsi 'I'. Kapan saja permata itu dihapus, tidak apa-apa.

Thiago Ganzarolli
sumber
1
sudoseharusnya tidak diperlukan jika permata dipasang oleh pengguna biasa.
sampablokuper
Lihat jawaban saya untuk alasan mengapa saya downvoted. Saya ingin berkomentar di sini, tetapi komentar tidak mengizinkan garis ...
aercolino
bagus, bisa menghapus banyak permata, tetapi sesuatu seperti itu seperti bundel, menyapu, rvm
coolesting
Sangat elegan tetapi gagal karena ketidakmampuan untuk menghapus permata bawaan. Sarankan solusi crftr sebagai gantinya
Freedom_Ben
11

Pertama, pastikan Anda memiliki setidaknya permata versi 2.1.0

gem update --system
gem --version
# 2.6.4

Untuk menghapus cukup jalankan:

gem uninstall --all

Anda mungkin perlu menggunakan sudoperintah:

sudo gem uninstall --all
mengumpulkan
sumber
10

Gunakan salah satunya

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

atau

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

Tergantung pada apa yang Anda inginkan, Anda mungkin perlu menjalankan keduanya, karena "daftar permata" dan "daftar permata sudo" menyediakan daftar independen.

Jangan mencampur "daftar permata" yang normal dengan "permata instal" sudo-ed atau sebaliknya, Anda mungkin akhirnya menghapus permata yang diinstal sudo (sebelumnya) atau mendapatkan banyak kesalahan (yang terakhir).

aercolino
sumber
Anda benar, saya mengedit jawaban saya untuk mengecualikan sudo. Untuk kedua versi, pengguna dapat mengandalkan jawaban Anda.
Thiago Ganzarolli
9

Jika Anda menggunakan rubygems versi 2.1.0 atau lambat, Anda dapat mencoba: gem uninstall --all.

rrrub
sumber
3
Itu harus 'permata' bukan 'permata'.
kumpulkan
6

Jika Anda suka melakukannya menggunakan ruby:

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

Bersulang

Haris Krajina
sumber
Saya mendapatkan kesalahan dengan ini: GALAT: Saat menjalankan permata ... (Gem :: CommandLineError) Harap sebutkan setidaknya satu nama permata (mis. Permata bangun GEMNAME)
mbdev
1
@ mbdev Tetap, hehe memberikan dukungan untuk jawaban saya di Stack Overflow :)
Haris Krajina
Ini berguna karena berfungsi di Windows di mana shell perintah ... tidak baik.
AdamC
5

Rubygems> = 2.1.0

gem uninstall -aIx

Jika Terminal mengembalikan kesalahan di bawah ini

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

Kemudian tulis perintah di atas seperti di bawah ini

sudo gem uninstall -aIx

Dan masukkan kata sandi akun os mac Anda Selesai !!

Kirtikumar A.
sumber
5

Dan bagi Anda yang ada di sini karena Anda ingin menghapus semua permata dengan awalan tertentu ( ahem saya melihat Anda aws-sdk!), Anda dapat menjalankan sesuatu seperti ini:

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

Jelas dimasukkan dalam kueri Anda, bukan aws-sdk-. Anda perlu -Idi sana untuk mengabaikan dependensi.

Diadopsi dari jawaban Ando sebelumnya

Trevor Elwell
sumber
4

Satu-satunya perintah membantu saya untuk membersihkan semua permata dan mengabaikan permata default, yang tidak dapat dihapus

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

Saya melakukan itu belum lama ini (situasi RVM switcher poster-child yang sama):

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

Mengambil daftar semua permata (termasuk barang versi), memotongnya untuk menyimpan hanya nama permata, lalu mencopot pemasangan semua versi permata tersebut.

Ini sudohanya berguna jika Anda menginstal permata di seluruh sistem, dan tidak boleh dimasukkan kecuali diperlukan.

Romain
sumber
1

Ketika mencoba untuk menghapus permata yang diinstal sebagai root, xargs tampaknya berhenti ketika menemukan kesalahan yang mencoba untuk menghapus instalan permata default:

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


Ini tidak akan berfungsi untuk semua orang, tetapi inilah yang saya gunakan sebagai gantinya:

sudo for gem (`gem list | cut -d" " -f1`); do gem uninstall $gem -aIx; done
Zaz
sumber
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 di sini tidak termasuk permata default. Semua permata lainnya akan dihapus. Anda juga dapat mengawalinya dengan sudojika Anda mendapatkan masalah izin.

moeabdol
sumber