rel dibundel bersih

88

Setelah memperbarui bundel, Anda akan memiliki beberapa permata yang mungkin sudah usang - karena versi permata yang lebih baru telah diinstal. Tidak ada perintah seperti itu di bawah bundleeksekusi yaitu bundle clean. Bagaimana cara menyingkirkan permata usang ini?

Ini adalah upaya untuk mengurangi ukuran siput di aplikasi rel saya.

iGbanam
sumber

Jawaban:

132

Jika Anda menggunakan Bundler 1.1 atau yang lebih baru, Anda dapat menggunakan bundle clean, seperti yang Anda bayangkan. Ini berlebihan jika Anda menggunakan bundle install --path(Bundler mengelola lokasi yang Anda tentukan dengan --path, jadi bertanggung jawab untuk menghapus permata yang kedaluwarsa), tetapi jika Anda telah menggunakan Bundler untuk menginstal permata sebagai permata sistem maka bundle clean --forceakan menghapus permata sistem apa pun yang tidak dibutuhkan oleh Gemfile Anda. Peringatan yang sangat membutakan: jangan lakukan ini jika Anda memiliki aplikasi lain yang mengandalkan permata sistem yang tidak ada di Gemfile Anda!

Pat Shaughnessy memiliki deskripsi yang baik tentang bundle cleandan tambahan baru lainnya di bundler 1.1 .

David Waller
sumber
30
Bagi mereka yang menggunakan rvm, perhatikan yang bundle clean --forcetidak menyentuh permata global Anda, tetapi hanya yang ada di gemet Anda saat ini. Jadi bundle clean --forcemenghasilkan hasil yang sama seperti dan lebih cepat kemudian rvm gemset emptydiikuti oleh bundle install.
Gabe Kopley
19
DISCLAIMER: "Bundle clean --force" dapat meledakkan sejumlah besar permata jika Anda tidak berhati-hati. Itu seharusnya menjadi baris pertama dari tanggapan ini ... terutama karena memiliki banyak suara. HATI-HATI!
jerrylroberts
36

Jika Anda menggunakan RVM, Anda dapat menggunakannya rvm gemset emptyuntuk gemset saat ini - perintah ini akan menghapus semua permata yang dipasang ke gemset saat ini (gemset itu sendiri akan tetap di tempatnya). Kemudian jalankan bundle installuntuk menginstal versi permata yang sebenarnya. Juga pastikan bahwa Anda tidak menghapus permata umum seperti rake, bundler, dan sebagainya selama rvm gemset empty(jika demikian, instal secara manual melalui gem installsebelumnya bundle install).

trushkevich
sumber
22

Jika Anda menggunakan RVM, Anda dapat menginstal permata Anda ke dalam gemet . Dengan begitu, ketika Anda ingin melakukan pembersihan penuh, Anda cukup menghapus gemet, yang pada gilirannya menghapus semua permata yang terpasang di dalamnya. Pilihan Anda yang lain adalah dengan menghapus permata yang tidak digunakan dan menjalankan kembali bundle installperintah Anda .

Karena bundler dimaksudkan sebagai alat pembuatan versi gem proyek per proyek, bundler tidak memberikan bundle cleanperintah. Melakukan hal itu berarti kemungkinan menghilangkan permata yang terkait dengan proyek lain juga, yang tidak diinginkan. Itu berarti bundler mungkin alat yang salah untuk digunakan untuk mengelola direktori permata Anda. Rekomendasi pribadi saya adalah menggunakan gemsets RVM untuk meng-sandbox permata Anda dalam proyek atau versi ruby ​​tertentu.

Pan Thomakos
sumber
41
Tidak perlu menghapus gemset, Anda cukup mengetik 'rvm gemset empty gemset_name' dan kemudian jalankan 'bundle install' lagi.
JAG
Penjelasan yang bagus. Mengetahui hal itu tentang bundler membantu. Terima kasih.
Volte
9
bundle clean --force akan melakukan pekerjaan itu
pelaut
dengan rvm, hapus folder .rvm / gems / ruby-xxxxxx / spesifikasi jika "bundle install" menolak untuk mengunduh ulang gems.
barbacan
@JAG Saya ingin menambahkan bahwa Anda perlu 'gem install bundler' setelah membersihkan gemset untuk dapat memanggil bundle install
maleta
13

Sejujurnya, saya memiliki masalah dengan dependensi bundler melingkar dan cara terbaik untuk melakukannya adalah rm -rf .bundle. Selamatkan dirimu dari sakit kepala dan gunakan saja palu.

Tyler Brock
sumber
1
Saya harus melakukan ini untuk membuatnya berhenti mengganggu saya tentang "Anda harus memanggil bundle install dengan --no-deployment". Terima kasih
Kevin
2
Terima kasih untuk idenya. Meskipun bagi saya, menggunakan palu yang lebih besar membantu. rvm implode --forcedan kemudian instal ulang rvm
Ryan
1

Saya berasumsi Anda menginstal permata ke vendor/bundle? Jika demikian, mengapa tidak menghapus semua permata dan melakukan pembersihan bundle install?

Leonid Shevtsov
sumber
direktori vendor saya hanya melacak aset dan plugin yang terpasang. Saya di Rails 3.1
iGbanam
Lalu apa alasan untuk menghapus permata yang tidak digunakan jika tidak disalin saat digunakan? Mereka tidak memakan banyak ruang.
Leonid Shevtsov
saya menerapkan aplikasi rel ini di intranet; artinya saya menangani file dan lingkungan secara lokal. jika Anda mengetahui solusi yang dapat saya gunakan untuk ini, silakan bagikan.
iGbanam
0

Hapus saja permata usang dari Gemfile Anda. Jika Anda berbicara tentang Heroku (Anda tidak menyebutkannya) maka slug dikompilasi setiap rilis baru, hanya menggunakan konten file tersebut saat ini.

Gareth
sumber
ini belum tentu untuk heroku. Saya ingin mengurangi ukuran aplikasi rel itu sendiri.
iGbanam
0

Jalankan saja, untuk membersihkan permata usang dan menghapus peringatan cetak setelah bundel.

bundle clean --force

codevb
sumber