2011-06-27 23 views
71

Mümkün olduğunda mygem.gemspec içinde git dalı bağımlılığı var mı?Ruby Gemspec Bağımlılık: Mümkün mü?

şuna benzer bir şey düşünüyorum:

gem.add_runtime_dependency 'oauth2', :git => '[email protected]:lgs/oauth2.git' 

... ama çalışmıyor.

+0

Aynı sorun var, yol bağımlılığı istiyorum, git bağımlılığı istemiyorum. Bir şekilde buralarda dolaşmanın bir yolu yok mu? Belki bir yerde gemspec içinde bazı hackish Ruby kodunu yapıştırarak? – Ajedi32

cevap

37

Bu mümkün değildir ve muhtemelen RubyGems'in gem geliştiricilerin kullanıcıların bir gemiye erişmek için belirli bir sürüm kontrol sistemine sahip olmasını gerektirmesine izin vermesi oldukça ağır olacağından hiçbir zaman olmayacaktır. Mücevherler, insanların mümkün olduğunca geniş bir uygulama dizisi içinde kullanabilmeleri için asgari bağımlılıklarla kendi kendine yeterli olmalıdır.

Kendi iç projeleriniz için bunu yapmak istiyorsanız, önerim bu oldukça iyi olan Bundler kullanmak olacaktır.

+12

... evet, ama nasıl yapabilirim? –

+0

Her ikisi de eski bir faradayı (0.6.1) işaret eden faraday ve oauth2 gibi, diğerlerinin çoğunu yeniden birleştiren bir gem (omniauth) topluyorum. O iç içe bağımlılığı çözmeyi deniyordum ... –

+6

Aynen önerdiğin gibi yap, ama Gemfile'da. Açık bir oauth2 gereksinimi yoksa, ekleyin ("gem 'oauth2',: git => '....'") ve paket yükleyin. – gtd

12

DÜZENLEME

bir yorumcu göre bu artık doğrudur. Önceden bilgi, tarihi bağlam için korunmuştur.

Gemfile bir mücevher referansı Kopyalama ve .gemspec şimdi Bundler bir uyarı mesajı yükseltmek görünüyor, bu nedenle bu cevap artık doğru olarak görünecektir. Yehuda Katz tarafından

Eski bilgileri

This makale benim için benzer karışıklığı temizledi. Sadece geliştirme için kullanmak için, gel-in şeyleri gemfile eklemek için en iyisi, ama bu bundler hala gemspec bağımlılık/sürüm bilgisi kullanacaktır (bana büyülü görünüyor, ama Yehuda'ya güveniyorum).

+3

Bu konuda ne kadar büyülü? Bundler sadece Gemfile'dan okur - eğer gemspec'i buraya koyarsanız, o da gemspec'ten okur. Bu yüzden, 'bundle install' çalıştırdığınızda, Bundler'ın Gemfile'da belirtilen gemiyi yüklediğini varsaydığımı (ancak test etmediğimi) varsayalım. Bundler zaten onu yüklemiş olduğundan, bu gem bir mücevher deposundan gelmediği gerçeğinden bağımsız olarak, 'need' için gem için kullanılabilir. Sihir yok, sadece Bundler her zamanki gibi çalışıyor. –

+2

Gemfile ve .gemspec öğelerinde referansı bir bölüme kopyalamak, Bundler'da bir uyarı iletisi oluşturuyor gibi görünüyor, bu nedenle bu yanıt doğru olmayacak gibi görünüyor ... –

5

Sadece bu sorunu çözmeye çalışıyordum. Ve ben sadece şu çözümü buldum: (geminizi yayınlamanızın ya da oauth2 geminin yeniden dağıtım haklarına sahip olup olmadığından emin değilim).

Bu geminizde oauth2 gem gerektirir. Farklı bir varsayılan dışında şube senin gemspec ise

cd lib/oauth2 && git checkout <branchname_or_ref> 
cd .. && git add lib/oauth2 
git commit -m "adding outh2 submodule" 

gerektiriyorsa

git submodule add [email protected]:lgs/oauth2.git lib/oauth2 

sizin gerektiren sürüm çizgisinin üzerinde bu eklentiyi Ayrıca

$:.push File.expand_path('../lib/oauth2/lib', __FILE__) 

Eğer tüm eklemeniz gerekir oauth2 gem'in çalışma zamanı bağımlılıkları gemspec'inize. Bu konuda henüz bir şey anlamadım.

Yaptığım şey budur ve bizim taşımızın gitmesi gerektiği için çalışıyoruz, bu yüzden bu bir rubygems yayınlanmış gemide işe yarayacağından emin değilim.

+0

Alt modül olarak bağımlılığı eklemek doğru çözümdür. her iki mücevher de yazar ve her ikisi de aktif gelişimdedir. – benjineer