2009-07-11 10 views
6

Bir "gereksinim" ifadesine karşılık hangi rubygem'in kullanıldığını nasıl belirleyebilirim? yardımcı olmayan bir mücevher.Kullandığınız rubygem'i belirleme

Arka plan: proje hornsby-herbaryum-ayrıştırıcısı için gem roo kullanıyorum.

Github gem hmcgowan-roo'yu kullandım, o zamanlar roo'nun rubyforge versiyonundan daha günceldi. Kodun runcoderun üzerinde test edilmesini denedim ve roo'nun herhangi bir sürümü olmadığı için başarısız oldu. Bu zamana kadar, roo'nun yeni sürümleri hem github hem de rubyforge üzerinde mevcuttu.

rubyforge'un en son sürümünün kodum için çalışıp çalışmadığına karar verdim, çünkü rubyforge'un github çatallarından daha resmi, otoriter ve kararlı olduğunu varsayardım. Bir keresinde rubyforge versiyonunun kodumla çalıştığına eminim, eğer sistemlerine kurabilirlerse runcoderun'a güzelce soracaktır.

Ben sudo gem roo yüklü ve benim taşlar şimdi "hmcgowan-roo (1.3.5)" ve "roo (1.3.6)" içerir ve hornsby-herbaryum-ayrıştırıcı için testler hala geçer. Rubyforge sürümü daha yakın bir zamanda kurulduğundan, 'un testlerde kullanılan olması gerektiğini biliyorum, ancak bunu doğrulamak istiyorum.

gem which roo 
bu bana yanlış cevap olduğunu varsayalım

(checking gem hmcgowan-roo-1.3.5 for roo) 
/usr/lib/ruby/gems/1.8/gems/hmcgowan-roo-1.3.5/lib/roo.rb 

verdi çünkü

, yardımcı olmadı .

Güncelleme: Ben hala hmcgowan-roo-1.3.5 kullanıyorum diyerek gem ile hem katılıyorum hem

$:.detect {|dir| dir =~ /roo/} 

ve

puts Roo::VERSION::STRING 

kullandı.

+0

İster CLI'den isterse Ruby'den istersiniz, her ikisi de sorun değil mi? –

+0

Benzer ancak Rails için (böylece Bundler'ı varsayar): http://stackoverflow.com/questions/1621405/how-to-tell-which-version-of-a-gem-a-rails-app-is-using –

cevap

3

İlk koyar, rubygems yüksek sürüm numarası mücevher değil, en son yüklenen yükleyecektir. Yani burada 1.3.6 roo almalısınız. Bunun dışında, ikinci gerritin bir sürüm sabitini arama önerisi. Mesela rmagick'i yükledim ve sabit bir Magick :: Version var. Başka bir örnek de Open4 :: VERSION.

>> require 'open4' 
=> true 

>> $:.detect {|dir| dir =~ /\/open4-([^\/]*)\//} 
=> "/Library/Ruby/Gems/1.8/gems/open4-0.9.6/bin" 

>> $1 
=> "0.9.6" 
+1

I $ düşünmedim: teşekkürler. Ancak, düzenli ifadeyle, birisi johndoe-open4'ü yarattıysa, o zaman eşleşmez. –

+0

Doğru, doğru. Bu yüzden onu 'hacky' dedim. Ama belki biraz daha tamir edebilirsin. –

-1

En basit yol, rubygems'i tek tek kaldırmak ve yeniden yüklemek olacaktır. Github'un kararlı kaynaklara sahip olmadığı hakkındaki varsayımınızın bu kadar doğru olduğundan emin değilim.

5

tüm Roo::VERSION::STRING

1

mücevher liste xxx varsayılan olarak en son sürümünü yüklemek için: Eğer gibi hacky bir şey yapabileceğini yedek olarak böylece

Ancak tüm taşlar, bir versiyon sabit var.

1

Eğer kullanım yapabilirsiniz Gem::VERSION

require 'rubygems'; puts Gem::VERSION 

emin olmak için, eğer oldukça yararlı bir yakut programında tüm makineleri accrossing rubygem'ler aynı sürümü altında başvurunuz (örneğin paketleyici Gemfile)