Gemfile'mda nasıl yerel bir mücevher belirtebilirim?


Yanıtlar:


541

Bunu yapabileceğine inanıyorum:

gem "foo", path: "/path/to/foo"

10
Sabit kodlu bir yol, hızlı bir hack oturumu için iyidir, ancak bloudermilk'in yerel mücevher çözümü sürüm kontrolü altındaki projeler için daha etkilidir. Her iki projede de kontrol etmenizi sağlar - mücevher kullanarak mücevher ve proje - başkalarının mücevher kaynağını kontrol etmesi veya aynı yolları paylaşması gerekmeyebilir.
mahemoff

4
Proje dizininizdeki yerel mücevherinize bir .gitignored symlink kullanarak bunu biraz daha temiz hale getirebilirsiniz - böylece her iki projede de kaynak denetimini ayrı ayrı kullanabilirsiniz ve diğerleri aynı dizin yapısına sahip olmadan aynı şeyi yapabilir.
Dan

7
Dikkat edilmesi gereken bir şey Bahar olabilir. Geminiz için yerel bir yol kullanıyorsanız, raylar konsolunda yaptığım gibi yerel geminizin önbelleğe alınmış sürümlerini fark edebilirsiniz. Yerel mücevher değişiklikleri alınmıyor gibi görünmüyorsa spring stop, gerçekten sorun olup olmadığını görmek için deneyin .
Jason R

1
Config / spring.rb dosyasına yerel mücevher yolu eklemek, ray konsolunu / sunucusunu yeniden başlattıktan sonra yerel mücevher değişikliklerinizi almanıza yardımcı olur.
Jason R

5
Bunu burada yapmanın daha iyi bir yolu: rossta.net/blog/…
Cyzanfar

230

Yolu belirtmenin yanı sıra (Jimmy'nin belirttiği gibi) Bundler'ı yalnızca aşağıdaki yapılandırma seçeneğini kullanarak ortamınız için yerel bir mücevher kullanmaya da zorlayabilirsiniz :

$ bundle config local.GEM_NAME /path/to/local/git/repository

Yan yana iki mücevher veya mücevher ve ray uygulaması geliştiriyorsanız bu son derece yararlıdır.

Ancak bunun yalnızca bağımlılığınız için git'i kullandığınızda işe yaradığını unutmayın, örneğin:

# In Gemfile
gem 'rack', :github => 'rack/rack', :branch => 'master'

# In your terminal
$ bundle config local.rack ~/Work/git/rack

Dokümanlarda görüldüğü gibi .


Bu konuda sorunlar yaşıyorum çünkü kullanıyorum BUNDLE_PATH(dağıtım için bir paket oluşturma). Önerdiğinizi veya Jimmy'nin cevabını yaparken, sadece bir şey yapar usingve aslında BUNDLE_PATHklasörüme yüklenmez . Bunu anlayamadım, herhangi bir yardım?
Automatico

2
Buradaki tartışma başına bunun bir gemspec ile çalışmadığını unutmayın .
davetapley

31
Yerel geçersiz kılmayı devre dışı bırakmak için:bundle config --delete local.GEM_NAME
alxndr

Bu işe almak için mücevher satırından sürüm yönergesini kaldırmak zorunda kaldı.
Epigene

4
Üretimden geliştirmede farklı bir şube kullanmak isterseniz, ayrıca ayarlamanız gerekir bundle config disable_local_branch_check trueveya Bundler şube hakkında şikayet edecektir. Çeklerin yanlış taahhütlerin girmesini durdurması gerektiği için buna dikkat edin Gemfile.lock. Dokümanlar burada: bundler.io/v1.12/git.html
Leo

33

Üzerinde çalışıyorsanız, git ile yerel bir mücevher de başvurabilirsiniz.

gem 'foo',
  :git => '/Path/to/local/git/repo',
  :branch => 'my-feature-branch'

Sonra değişirse koşarım

bundle exec gem uninstall foo
bundle update foo

Ama herkesin bu iki adımı atması gerektiğinden emin değilim.


5
bu harika, ancak gem'i aktif olarak geliştiriyorsanız o kadar da uygun değil ... çünkü bundle uninstall <gem> && bundle install her değişikliği yapmanız ve uygulamanıza yansıtılmasını istediğiniz her değişiklik için
Ramses

18

Bir Rails projesinde yerel mücevher deposunu kullanmak için aşağıdaki adımları izleyin:

  1. Gem klasörünüzün git deposu olup olmadığını kontrol edin (komut gem klasöründe yürütülür)

    git rev-parse --is-inside-work-tree
  2. Havuz yolu alma (komut gem klasöründe yürütülür)

    git rev-parse --show-toplevel
  3. Raylar uygulaması için yerel bir geçersiz kılma ayarlama

    bundle config local.GEM_NAME /path/to/local/git/repository

    nerede GEM_NAME adı/path/to/local/git/repository ve komutun noktadaki çıktısı2

  4. Uygulamanıza Gemfileaşağıdaki satırı ekleyin:

    gem 'GEM_NAME', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
  5. Koşu bundle installböyle bir şey vermelidir:

    Using GEM_NAME (0.0.1) from git://github.com/GEM_NAME/GEM_NAME.git (at /path/to/local/git/repository) 

    GEM_NAMEgeminin adı nerede ve/path/to/local/git/repository nereden2

  6. Son olarak, koş bundle list, değil gem listve böyle bir şey görmelisin:

    GEM_NAME (0.0.1 5a68b88)

    GEM_NAMEgeminin adı nerede


Kullanarak gözlemlediğim birkaç önemli durum:

Rails 4.0.2  
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] 
Ubuntu 13.10  
RubyMine 6.0.3
  • Görünüşe göre RubyMineyerel taşlar harici bir kütüphane olarak gösterilmiyor. Hata hakkında daha fazla bilgiyi burada ve burada bulabilirsiniz
  • Yerel mücevher bir şey değiştirirken, raylar uygulamasında yüklenmek stop/startiçin raylar sunucusu gerekir
  • versionGem değiştiriyorum, stopping/startingRails sunucusu bana bir hata verir. Bunu düzeltmek için, Gemfilebu gibi raylar uygulamasında mücevher sürümünü belirtiyorum :

    gem 'GEM_NAME', '0.0.2', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'


-4

Şube de istiyorsanız:

gem 'foo', path: "point/to/your/path", branch: "branch-name"

Bu işe yaramaz, bir hata oluşturur: Only gems with a git source can specify a branch.
KenB
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.