2010-11-09 17 views
11

Bir şey kaçırmam gerekiyordu çünkü geçen gece, check gem dependencies için googling'i bulmaya şaşırdım ve benzerleri bunun cevabını göstermedi.Yüklü Ruby taşlarının tüm bağımlılıklarının tatmin edildiğini nasıl kontrol edebilirim?

Temelde, rpm -V kaba eşdeğer bir eşdeğeriyim - yüklü taşlarmdan bazılarını veya tümünü geçecek ve bağımlılıklarının da yüklendiğinden emin olacak bir komut. gem install, varsayılan olarak bağlı olan tüm taşları yüklediğinden, normalde bu gerekli değildir; Ancak, gem uninstall bir mücevher ve diğer mücevherler kaldırılmış olana bağlı olsa da kaldırma işlemine devam etmesini söylerseniz, o zaman kesin olarak bozuk bağımlılıklar ile sonuçlanacaktır. Soru şu ki, herhangi bir mücevher yüklemeden/kaldırmadan/güncellemeden o bozuk bağımlılıkları nasıl listeleyeceksiniz?

N.B. Bundler'ı içeren cevaplar benim için pek fazla kullanılmıyor, çünkü çeşitli nedenlerden dolayı hala Rails 2.x üzerinde takılıyorum.

cevap

5

zaman ... Eğer Bundler hakkında cevaplar ilgilenen olmadığını söyledi biliyorum ama

Bundler sizin için mücevher bağımlılık çözünürlüğü işleyebilir ve Raylar 2.3 ile uyumludur olacaktır. Bir dizi Rails 2 uygulamasıyla Bundler'ı kullandım ve herhangi bir sorun yaşamadım. http://gembundler.com/rails23.html

+1

Teşekkürler - bilmek güzel. Ancak Bundler'ın kurulu olduğunu varsaydığım taktirde, takılı tüm mücevherlerimde nasıl bir bağımlılık kontrolü yapacağım? Onları içeren bir kukla Gemfile oluşturmak ve daha sonra 'bundle check' veya benzeri çalıştırmak zorunda mıyım? –

+0

Ben kukla bir Gemfile kullanarak, ancak tamamen Bundler'a taşınmayı öneriyorum. Böylelikle sadece şu andaki probleminizi çözmez, aynı zamanda gelecekte gerçekleşecek bu tür şeylerden de kaçınırsınız. – georgebrock

+0

Teşekkürler - Bundler'a bir baktım ve bence haklısınız. “Gem” in bozuk bağımlılıkları kontrol etmeyi desteklememesi utanç verici ancak iş akışımı Bundler'a çevirmek artık, bağımlı paketler ile ilgili endişeleri ortadan kaldırmak zorunda olmamam gerektiği anlamına geliyor. * Verilen bir proje kapsamında * sabittir. –

3

Eğer gem update çalışan denediniz:

burada Raylar 2.3 üzerinde Bundler yüklemek için talimatlar vardır? Bu tüm mücevherleriniz için tüm bağımlılık testlerini çalıştıracaktır. Ayrı bir dizine kurmak için bunu çalıştırabilirsiniz.

[değiştir] Ayrıca, gem check çalıştırdığınızda ne olur? gem dependency tüm mücevher bağımlılıklarını listeleyecektir. Bir şey yüklü olup olmadığını size söylemezse, bu mücevherlerin yüklü olup olmadığını görmek için çıktıyı check gibi bir komuta girebilirsiniz. [/ değiştir] bash kabuğunda

+0

Teşekkürler ama bu aynı zamanda Rails uygulamasını kırma potansiyeli olan taş versiyonlarının istenmeyen yan etkilerine de sahip olacak. Özellikle yerel mücevherlerin salt okunur bir kontrolünden geçtiydim - bunu netleştirmek için asıl sorumu güncelleyeceğim. –

+0

true.Ancak bunu çalıştırabilirsiniz, böylece güncellemeler gem klasörünüzde yüklü değildir. Ayrıca, mücevher modası geçmiş deneyebilirsiniz. – philosodad

+0

'gem check 'bir şey çıkarmaz, ancak yine de bağımlılıkları kontrol etme iddiasında değildir. Aynı şekilde 'mücevher modası geçmiş' sadece hangi mücevherlerin daha yeni sürümleri olduğunu rapor eder, yine de herhangi bir bağımlılığı görmezden gelir. –

16

:

gem list --no-version > list 
gem dependency --pipe > depends 
grep -v -f list depends > failed.txt 
rm list 
rm depends 

failed.txt şimdi yüklü olmayan tüm bağımlılıkları listesine sahip olacaktır.

+0

Teşekkürler, bu çok yararlı! Yine de, bazı tatminsiz bağımlılıkları kaçırdığını düşünüyorum. gem A gem B sürüm x bağlıdır, ancak gem B sadece y sürümü yüklü ise, sadece gem B yüklü olduğunu kontrol yana, A geminin bağımlılığı tatminsiz olmadığını ortaya çıkmaz. –

+0

Yanıt yararlıysa, oylamayı düşünebilirsiniz. Aradığın özellik 'gem lock' olarak adlandırılıyordu, ancak 'lock' komutu kullanımdan kaldırıldı ve rubygem grubu Bundler'ı önerdi. Mücevherlerin eski versiyonum hala "kilitle" komutuna sahip, seninki de yapıp yapmadığını görebiliyorsun. – philosodad

+3

StackOverflow bana izin verirse oy kullanırdım :-(Bu, benim kendi sorumu göz önüne alındığında gülünç görünen 15 itibara ihtiyaç duyar. –

1

Uygulama için Bundler'a geçmeyi kesinlikle kabul ediyorum. Eğer bir sistemde (örneğin benim gibi) yüklü taşlar için tatmin edici olmayan taş bağımlılıklarını hızlı bir şekilde tanımlamak için açık bir şekilde seyir ediyorsanız, bu senaryoyu bir deneyin.

https://gist.github.com/1124953