2011-10-26 14 views
69

Bir paketi güncelleştirdikten sonra, bu mücevherin daha yeni bir sürümü yüklendiğinden, eskitmek zorunda kalabileceğiniz bazı mücevherleriniz olacaktır. bundle çalıştırılabilir i.e. bundle clean altında böyle bir komut yoktur. Bu eskimiş mücevherlerden nasıl kurtulur?raylar paket temizliği

Bu, raylar uygulamasında sümük boyutunu azaltmak için bir girişimdir.

cevap

113

Bundler 1.1 veya daha yenisini kullanıyorsanız, olabildiğince hayal ettiğiniz gibi bundle clean'u kullanabilirsiniz. bundle install --path (Bundler --path ile belirttiğiniz yeri yönetir, bu nedenle eski moda taşların kaldırılması için sorumluluk alır) gereksizdir, ancak sistem mücevherleri olarak taşlar yüklemek için Bundler kullandıysanız bundle clean --force herhangi bir sistemi silecektir Gemfile tarafından gerekli olmayan taşlar. Göz kamaştırıcı bariz bir uyarı: Gemfile'ınızda olmayan sistem mücevherlerine dayanan başka uygulamalarınız varsa bunu yapmayın!

Pat Shaughnessy, bundle clean and other new additions in bundler 1.1'un iyi bir tanımlamasına sahiptir.

+20

rvm kullananlar için, 'bundle clean --force' küresel taşlarınıza dokunmadığını, sadece mevcut taşlarınızda bulunanların olduğunu unutmayın. Yani 'bundle clean --force 'aynı sonucu üretir ve daha hızlıdır, daha sonra' rvm gemset empty' '' bundle install'' sonra gelir. –

+15

YASAL UYARI: "Bundle clean --force", dikkatli değilseniz çok sayıda taş atlatabilir. Bu yanıtın ilk satırı olmalı ... özellikle de çok fazla oyu olduğu için. DİKKATLİ OL! – jerrylroberts

21

RVM kullanıyorsanız, mücevherlerinizi gemsets'a yükleyebilirsiniz. Bu şekilde, tam bir temizlik yapmak istediğinizde, basit bir şekilde, takılan tüm taşları takan gemseti kaldırabilirsiniz. Diğer seçeneğiniz, kullanılmayan mücevherleri kaldırmak ve bundle install komutunu yeniden çalıştırmaktır.

Birleştirici, proje başına bir mücevher sürüm oluşturma aracı olması gerektiği için bir bundle clean komutu sağlamaz. Bunu yapmak, diğer projelerle ilişkili olan mücevherlerin çıkarılması olasılığını da beraberinde getirecektir ki bu da arzu edilmeyecektir. Bu, bundler muhtemelen gem dizini yönetmek için kullanmak için yanlış bir araç olduğu anlamına gelir. Benim kişisel tavsiyem, belirli projelerde veya yakut sürümlerinde mücevherlerinizi korumak için RVM gemsetlerini kullanmak olacaktır.

+40

gemset kaldırmak gerek yok, tekrar 'paket yüklemek' sadece 'rvm gemset boş gemset_name' yazıp çalıştırabilirsiniz . – JAG

+0

Harika bir açıklama. Bundler hakkında yardımcı olduğunu biliyor. Teşekkürler. – Volte

+9

bundle clean --force işini yapacak – sailor

1

vendor/bundle içine taşlar yüklediğinizi varsayalım? Eğer öyleyse, neden tüm taşlar silmek ve temiz bir bundle install?

+0

satıcı dizinim sadece varlıkları ve yüklü eklentileri takip eder. Rails 3.1 – iGbanam

+0

üzerinde yaşıyorum Sonra dağıtılmamış eğer kopya kullanılmayan taşlar kaldırmak için nedeni nedir? O kadar yer kaplamıyorlar. –

+0

Bu raylar uygulamasını bir intranette dağıtıyorum; Dosyaları ve ortamı yerel olarak ele alıyorum. Bunun için kullanabileceğim herhangi bir çözüm biliyorsanız, lütfen paylaşın. – iGbanam

0

Sadece eski taşlar Gemfile'dan kaldırın. Eğer Heroku hakkında konuşuyorsanız (bundan bahsetmediniz) o zaman sümük her yeni sürümde derlenir, sadece o dosyanın mevcut içeriği kullanılır.

+0

Bu mutlaka heroku için geçerli değildir. Raylar uygulamasının kendisinin boyutunu azaltmak istiyorum. – iGbanam

10

Dürüst olmak gerekirse, bundler dairesel bağımlılıkları ile ilgili sorunlar yaşadım ve en iyi yolu rm -rf .bundle. Kendinizi baş ağrısından kurtarın ve sadece çekiç kullanın.

+0

aslında bana yardımcı olmadı, aynı hata. – holms

+1

"Paketleme yüklemesini --no-deployment ile çağırmanız" konusunda beni rahatsız etmemek için bunu yapmak zorunda kaldım. Teşekkürler – Kevin

+2

Fikir için teşekkürler. Benim için olsa da, daha büyük bir çekiç kullanmak yardımcı oldu. rvm implode --force 've sonra rvm'yi yeniden yükler – Ryan

30
Eğer RVM kullanıyorsanız, mevcut değerli taş için rvm gemset empty'u kullanabilirsiniz - bu komut mevcut değerli taşa takılan tüm taşları kaldıracaktır (gemsetin kendisi yerinde kalacak). Daha sonra taşlar gerçek sürümlerini yüklemek için bundle install çalıştırın. Ayrıca, rvm gemset empty ( gem install aracılığıyla bundle install'dan önce manuel olarak yükleyin) sırasında bu genel taşları tırmık, demetleyici ve benzeri şekilde silmediğinizden emin olun.