Bundler diluncurkan dari direktori root aplikasi Anda sehingga memastikan semua permata yang dibutuhkan hadir agar aplikasi Anda berfungsi.Jika karena alasan tertentu Anda tidak lagi membutuhkan permata, Anda harus menjalankan
gem uninstall gem_name
Seperti yang Anda sebutkan di atas. Jadi setiap kali Anda menjalankan bundler, itu akan memeriksa ulang dependensi
EDIT - 24.12.2014
Saya melihat bahwa orang-orang terus datang ke pertanyaan ini, saya memutuskan untuk menambahkan sedikit. Jawaban yang saya berikan adalah untuk kasus ketika Anda mempertahankan permata Anda secara global. Pertimbangkan untuk menggunakan pengelola permata seperti rbenv atau rvm untuk menjaga kumpulan permata dalam cakupan proyek tertentu.
Ini berarti bahwa tidak ada permata yang akan dipasang pada tingkat global dan oleh karena itu ketika Anda menghapus satu dari Gemfile proyek Anda dan menjalankan kembali bundel, maka itu, jelas, tidak akan dimuat dalam proyek Anda. Kemudian, Anda dapat menjalankan bundle clean (dengan direktori proyek) dan itu akan menghapus semua permata yang pernah diinstal dari Gemfile Anda (di direktori yang sama) tetapi saat ini tidak lagi terdaftar di sana .... Singkat cerita - ini menghapus permata yang tidak digunakan.
gem uninstall pg
dari folder proyek akan menghapus pg dari gemet tingkat global / sistem Anda alih-alih milik bundlerERROR: While executing gem ... (NoMethodError) undefined method `delete' for #<Bundler::SpecSet:0x00000101142268>
Dengan versi bundler yang lebih baru, Anda dapat menggunakan tugas bersih:
edit:
Ini tidak disarankan jika Anda menggunakan gemet global (yaitu - semua proyek Anda menyimpan permata mereka di tempat yang sama). Ada beberapa cara untuk memisahkan permata setiap proyek:
rvm
gemsets ( http://rvm.io/gemsets/basics )bundle install
dengan salah satu opsi berikut:--deployment
atau--path=<path>
( http://bundler.io/v1.3/man/bundle-install.1.html )sumber
bundle clean --force
menghapus banyak permata yang tidak saya gunakan dalam proyek saya saat ini tetapi digunakan dalam proyek saya yang lain. Apakah saya seharusnya menetapkan jalan? Hanyabundle clean
mengembalikan "Hanya dapat menggunakan bundle clean saat --path disetel atau --force disetel". Tetapi--path
opsi tersebut bahkan tidak muncul di bantuan.clean
tugas tidak benar-benar masuk akal jika Anda menggunakan gemset global. Tetapi jika Anda mau, setiap proyek Anda dapat memiliki permata yang terpisah. Anda dapat melakukannya melalui rvm gemsets ( rvm.io/gemsets/basics ), atau dengan menentukan jalur permata melalui--path
opsibundle install
( bundler.io/v1.3/man/bundle-install.1.html )Anda harus menggunakan 'gem uninstall gem_name' untuk menghapus permata.
Perhatikan bahwa jika Anda menginstal gem system-wide (mis. Sudo bundle install) maka Anda mungkin perlu menentukan direktori biner menggunakan opsi -n, untuk memastikan binari milik gem telah dihapus. Sebagai contoh
sumber
Sepertinya saya menyelesaikan ini dengan menghapus permata unicorn secara manual melalui bundler ("sudo bundler exec gem uninstall unicorn"), lalu melakukan rebundling ("sudo bundle install").
Tidak yakin mengapa itu terjadi, meskipun perbaikan di atas tampaknya berhasil.
sumber
Jika Anda ingin membersihkan semua permata Anda dan memulai kembali
sumber
Bundler sekarang memiliki
bundle remove GEM_NAME
perintah (sejak v1.17.0, 25 Oktober 2018 ).sumber