2012-02-21 17 views
12

Yerel makinelerde bir geliştirme ortamının hazırlanmasını otomatikleştirmek için yazdığım küçük bir Ruby komut dosyası var. Çünkü tüm makinelerde rubyzip2 kitaplığının mevcut olduğundan emin olamıyorum, gerektiğinde komut dosyasını yüklüyorum. taş kurulduktanKomut dosyası içine bir taş yerleştirdikten sonra, gemiyi nasıl yüklerim?

begin 
    require 'zip/zip' 
rescue LoadError 
    system("gem install rubyzip2") 
end 

sonra, komut devam yürütülmesine;:

Şu anda, benim komut dosyası aşağıdaki yapıyor Ancak, taş yüklenmedi, dolayısıyla tüm kod rubyzip2 gerektiren yürütmeyi durdurur.

Gem'i belleğe nasıl yüklerim, böylece komut dosyası yüklemeden sonra çalışmaya devam edebilir mi?

cevap

6

1.10 daha yüksek sürüm bundler ile here açıklandığı gibi yeni inline özelliğini kullanabilirsiniz (sadece gem install bundler çalıştırmak güncellemek için).gemfile yöntemin

require 'bundler/inline' 

gemfile(true) do 
    source 'https://rubygems.org' 
    gem 'catpix' 
end 

puts Catpix::VERSION 

İlk parametre zaten kullanıcının sistemde yüklü olmayan taşlar monte edilmelidir olup olmadığıdır.

1

Uygulamanız/kütüphanenizle Bundler kullanın. Bu, kullanıcıların bundle'u çalıştırmasına izin verecek ve tüm taşlar getirilecek ve kullanıma hazır olacak.

16

yerine require 'thegem' yapıyor ve hatayı kurtarmak, daha önce taş durumunu kontrol etmelidir ve gerekirse daha sonra, yükleyin. Sonra, bunu isteyebilirsiniz.

Yükleme tamamlandıktan sonra, size komut yeniden istemiyorsanız mücevher yolları temizlemek gerekir

this post for the gem availability

Ya this post

DÜZENLEME bir göz atın. Bu yöntemle bunu başarmak olabilir:

Gem.clear_paths 

zaten var cevaplandırılır sorular here

Yani kod gerekir (örneğin) aşağıdaki gibidir:

begin 
    gem "rubyzip2" 
rescue LoadError 
    system("gem install rubyzip2") 
    Gem.clear_paths 
end 

require 'zip/zip' 
1

Tamam sen isteyebilirsiniz Bundler kullanmak ve bir Gemfile ayarlamak sonra bundler paketi yüklemesi yapmak, bundler tüm taşlar almak ve zaten yüklü değilse yüklemek ve daha sonra gemide tüm taşlar gerektirir dosya. Daha fazla bilgi için bağlantıdaki belgeleri okuyun.

Ama ne senin soru özellikle yapmak isteyen yeniden deneme anahtar sözcüğü kullanmaktır. Bu anahtar kelime, kurtarma çağrıldıktan sonra döngüyü yeniden deneyecek.

Yani mücevher gerektiriyorsa ve onu başarısız olur ve Yük Hata İstisna olarak adlandırılır. Başlangıç ​​Bloğu kurtarılacak, sistem çağrısı gemiyi kuracak, daha sonra tekrar denenecek ve gemiye ihtiyaç duyulacaktır. belki sadece bir kez yeniden denemek için bir koşul kurmak istemiyorsanız, bu sonsuz bir döngüye yol açabilir, çünkü sadece temkinli.

begin 
    require 'zip/zip' 
rescue LoadError 
    system("gem install rubyzip2") 
    retry 
end 
+0

Bu, louiscoquio tarafından belirtilen nedenlerden dolayı çalışmaz. – Yoni

İlgili konular