2011-03-02 12 views
12

Pencerelerdeyim ve ruby ​​1.8.x'den 1.9.x'e güncellemeye başladım ve şimdi ruby-mssomethingrt.1.8.x.dll adlı bir hata şikayet ediyor.Yerel uzantıları olan yüklü taşların listesini nasıl alırım?

Hangi uzantıların yerel uzantılara sahip olduğunu öğrenmek istiyorum. Bu nedenle, hataları gidermek için bu yüklemeleri kaldırıp yeniden yükleme sırasında yerel uzantıların yerel olarak yeniden oluşturulmasını zorlayabilirim.

+0

+1 Çok yararlı. – MarkDBlackwell

cevap

7

İyi bir başlangıç, her gem için gem özelliklerine bakmak ve extensions alan kümesinin olup olmadığını görmek olacaktır. Bu yeniden yüklemek için kısa bir liste ile size bırakmalıdır. Mutlaka tümüyle yerel uzantıları kullanmazlar, ancak ilgili extconf.rb dosyalarına bakarsanız, bunu bulmak oldukça kolay olmalıdır.

Güncelleme: bu yerel kod çalışıyor konusunu gelecek mücevher sürüm sonraki kısım belirtmelidir

require 'rubygems' 

Gem.source_index.each do |gem| 
    spec = Gem.source_index.specification(gem[0]) 
    ext = spec.extensions 
    puts "#{gem[0]} has extensions: #{ext}" unless ext.empty? 
end 
+0

Bu cevap kesinlikle hiçbir şeyden daha iyi (işaretleme +1). Ama gerçekten de mücevher komutunun böyle bir özelliği olduğu doğal görünecek ... – Jarl

+1

Şimdi maalesef, Gem.source_index' gitmiş gibi görünüyor. – MarkDBlackwell

+0

Bunu deneyin: https://gist.github.com/aelesbao/1414b169a79162b1d795 – aelesbao

0

mücevher listesini

: örneğin İşte bu taşlar listelemek için kısa yakut script json (1.4.6 x86-mingw32)

Gördüğünüz hata, kullandığınız mücevherlerden biri 1.8 ruby ​​yorumlayıcının artık mevcut olmadığı (1.9'a yükselttiğiniz gibi) olmasını beklemesidir.

Sadece 'gem güncellemesini' çalıştırmanın sorununuzu düzeltebileceğini düşünürdüm. Eğer değilse, o zaman ruby ​​1.8 yorumlayıcısının mevcut olmasını bekleyecek olan alternatif bir mücevher aramanız gerekebilir.

+0

rubygems'in hangi versiyonu? 1.3.7 json gemini şöyle gösterir: json (1.6.5) '(platform bilgisi yok) –

5

Hepiniz yüklü taşlar ile yeniden (ve bir bozulmamış durumuna geri) olabilir:

gem pristine --all 

--all --no-extensions uzantıları olmadan taşlar geri ancak belgelenmiş olmasına rağmen edecek --extensions en az (hiçbir etkisi var gibi görünüyor Ubuntu 12.10 üzerinde rubygems 1.8.23 üzerinde.

+0

Bu komut, çok sayıda mücevher (yerel uzantı olmayanlar dahil) kapsamıdır, ancak bu zarar vermez. İşi yapar ve sonra da ... – Jarl

+0

da başka bir soruyu yanıtladım… "hata ayıklamak için bir gem değiştirirsem nasıl güvenilir bir şekilde geri yükleyebilirim?" – jackr

+0

''' pristine' aslında, yerel uzantıları olan taşlar bile, herhangi bir mücevheryi yeniden derlemez. – MarkDBlackwell

0

Cygwin'de gem list --all -d | grep --before-context=1 --after-context=4 Platform deneyebilirsiniz.

4

this answer dayanarak, burada bulur ve son yakut (> = 1.9) ile çalışır yerli uzantıları ile taşlar yeniden sunan bir çözümdür.

native_gems = [] 
Gem::Specification.each do |spec| 
    native_gems << "#{spec.name}:#{spec.version}" unless spec.extensions.empty? 
end 

install_cmd = "gem install #{native_gems.join ' '}" 
puts "Found #{native_gems.length} gem(s) with native extensions:" 
puts "\n> " + install_cmd, "\nReinstall gems with above command? (yn)" 

exec insall_cmd if gets.downcase[0] == 'y' 

Örnek Çıktı: bir OS dağıtım yükseltmeden sonra

Found 36 gem(s) with native extensions: 

> gem install atomic:1.1.13 bcrypt-ruby:3.0.1 bigdecimal:1.2.0 eventmachine:1.0.3 eventmachine:1.0.0 eventmachine:0.12.10 ffi:1.9.3 ffi:1.9.0 ffi:1.7.0 hiredis:0.4.5 hpricot:0.8.6 io-console:0.4.2 json:1.8.1 json:1.8.0 json:1.7.6 nokogiri:1.6.0 nokogiri:1.5.9 pg:0.17.1 pg:0.17.0 pg:0.16.0 pg:0.15.1 pg:0.13.2 psych:2.0.0 puma:2.7.1 puma:2.6.0 puma:2.4.0 puma:1.6.3 sqlite3:1.3.8 sqlite3:1.3.7 sqlite3:1.3.5 therubyracer:0.12.0 thin:1.5.1 thin:1.5.0 thin:1.4.1 websocket-driver:0.2.3 websocket-driver:0.1.0 

Reinstall gems with above command? (yn) 
… 
+0

Bu cevap, Ruby'nin modern bir sürümünde çalışan herkes tarafından tercih edilmelidir. –

İlgili konular