Mygem.gemspec içinde git şube bağımlılığı olabilir mi?
Aşağıdakine benzer bir şey düşünüyorum:
gem.add_runtime_dependency 'oauth2', :git => 'git@github.com:lgs/oauth2.git'
... ama işe yaramıyor.
Mygem.gemspec içinde git şube bağımlılığı olabilir mi?
Aşağıdakine benzer bir şey düşünüyorum:
gem.add_runtime_dependency 'oauth2', :git => 'git@github.com:lgs/oauth2.git'
... ama işe yaramıyor.
Yanıtlar:
Bu mümkün değildir ve büyük olasılıkla RubyGems'in gem geliştiricilerinin, kullanıcıların bir gem'e erişmek için belirli bir sürüm kontrol sistemine sahip olmalarını talep etmelerine izin vermesi oldukça ağır bir iş olacağı için mümkün değildir. Taşlar, minimum sayıda bağımlılıkla bağımsız olmalıdır, böylece insanlar bunları olabildiğince geniş bir uygulama dizisinde kullanabilir.
Bunu kendi iç projeleriniz için yapmak istiyorsanız, önerim bunu oldukça iyi destekleyen Bundler'ı kullanmanız olacaktır .
DÜZENLE
Bir yorumcuya göre, bu artık doğru değil. Önceki bilgiler, tarihsel bağlam için saklandı.
Gemfile ve .gemspec'teki bir mücevher referansını çoğaltmak artık Bundler'da bir uyarı mesajı veriyor gibi görünüyor, bu nedenle bu yanıt artık doğru görünmeyecektir.
Güncel olmayan bilgiler
Yehuda Katz'ın bu makalesi benim için benzer bir kafa karışıklığını ortadan kaldırdı. Yalnızca geliştirmede kullanmak için en iyisi git öğelerini gem dosyasına eklemektir, ancak bu paketleyici yine de gemspec'teki bağımlılık / sürüm bilgilerini kullanacaktır (bana büyülü görünüyor, ancak Yehuda'ya güveniyorum).
gemspec
- oraya koyarsanız , gemspec'ten de okur. Bu yüzden koştuğunuzda bundle install
, (ama test etmedim) olan şeyin Bundler'ın Gemfile'da belirtilen gem'i yüklemesi olduğunu varsayıyorum. Bundler zaten yüklediğinden beri, require
bir gem deposundan gelmemiş olmasına bakılmaksızın , bu gem gem tarafından kullanılabilir . Sihir yok, sadece Bundler her zamanki gibi çalışıyor.
Ben de bu sorunu çözmeye çalışıyordum. Ve şimdi aşağıdaki çözümü buldum (cevherinizi yayınladığınızdan veya oauth2 geminizi yeniden dağıtma hakkınız olup olmadığından emin değilim).
Oauth2 gem gerektiren geminizde bunu çalıştırın.
git submodule add git@github.com:lgs/oauth2.git lib/oauth2
Varsayılandan farklı bir şubeye ihtiyacınız varsa
cd lib/oauth2 && git checkout <branchname_or_ref>
cd .. && git add lib/oauth2
git commit -m "adding outh2 submodule"
Gemspec'inizde bunu gerekli sürüm satırınızın üstüne ekleyin
$:.push File.expand_path('../lib/oauth2/lib', __FILE__)
Ayrıca oauth2 gem'in tüm çalışma zamanı bağımlılıklarını gemspec'inize eklemeniz gerekir. Henüz bunun bir yolunu bulamadım.
Yaptığım şey buydu ve bizim için işe yarıyor çünkü bizim cevherimiz git üzerinden gereklidir, bu yüzden bunun bir rubygems yayınlanmış mücevher için işe yarayıp yaramayacağından emin değilim.
gem 'my_gem', git: 'git@github.com:me/myrepo', submodules: true
, github'dan yüklüyorsanız, ana bilgisayar uygulamanızda kullanmanız gerekebilir .
Oldukça basit bir çözüm buldum:
Bir projede olduğunuzu P
ve kendi tools
başına bir işletim sistemi mücevheri kullanan kendi kendine yapılan mücevheri kullanmak istediğinizi söyleyin oauth2
.
İçinde bir yama yaptıysanız oauth2
ve bu yamayı mücevherinizde kullanmanız gerekiyorsa tools
, bu sorunu kabul edilen cevaba göre mücevherde düzeltemezsiniz .
Bununla birlikte, istediğiniz sürümü P
projetinizin Gemfile dosyasında söyleyebilirsiniz ve bu tools
, çalışma zamanında tarafından kullanılan sürüm olacaktır :
gem 'oauth2', github: 'lgs/oauth2'