Gemfile'mda yerel .gem dosyalarını nasıl belirtebilirim?


Yanıtlar:


281

Bu kesinlikle .gempaketlerin yüklenmesi ile ilgili sorunuzun bir cevabı değildir , ancak Gemfile'ınızı düzenleyerek her türlü yeri gem-gem-gem bazında belirtebilirsiniz .

Bir :pathöznitelik belirttiğinizde, yerel makinenizde bu yoldan değerli taş yüklenir.

gem "foreman", path: "/Users/pje/my_foreman_fork"

Alternatif olarak, bir :gitöznitelik belirtmek , taşı uzak bir git deposundan yükler.

gem "foreman", git: "git://github.com/pje/foreman.git"

# ...or at a specific SHA-1 ref
gem "foreman", git: "git://github.com/pje/foreman.git", ref: "bf648a070c"

# ...or branch
gem "foreman", git: "git://github.com/pje/foreman.git", branch: "jruby"

# ...or tag
gem "foreman", git: "git://github.com/pje/foreman.git", tag: "v0.45.0"

(As @JHurrah belirtilen yaptığı yorum .)


Ayrıca bazı güvenlik duvarları için git protokolü sorun olabilir. Böyle bir durumda deneyingem "foreman", :git => "https://github.com/pje/foreman.git"
kode

61

Paketçi .gem dosyalarını kutudan çıkaramaz gibi görünüyor. .Gem dosyalarını içeren bir dizinin yolunu göstermek işe yaramıyor. Bazı insanlar bu amaç için yerel bir gem sunucusu (geminabox, stickler) kurmayı önerdi.

Ancak, çok daha basit buldum dosya sisteminden yerel bir gem "sunucu" kullanmaktır: Sadece .gem dosyalarınızı yerel bir dizine koymak, sonra bir Gem deposu yapmak için "gem create_index" kullanın

mkdir repo
mkdir repo/gems
cp *.gem repo/gems
cd repo
gem generate_index

Son olarak Gemfile'ınıza aşağıdaki satırı ekleyerek bundler'ı bu konuma doğrultun

source "file://path/to/repo"

Depodaki mücevherleri güncelleştirirseniz, dizini yeniden oluşturduğunuzdan emin olun.


6
Teşekkürler! Ayrıca, "file: /// Mutlak / Yol / to / repo" yapmak için üçüncü bir eğik çizgi gerekli
Anna

5
Gemfile komut satırında "gem sunucusu" çalıştırmak ve kaynak " localhost: 8808 " eklemek sadece kolay olmaz mıydı
Anna

Bu gerçekten harika Martin! Paylaştığınız için teşekkürler, tam olarak i çalıştıran bağlı istemiyordu çünkü ben gem serverde tüm projeyi, sadece .gem dosyasını barındırmak istedim aradığını oldu.
Leo Gallucci

6
Bonus ipucu: File.expand_path'i bu şekilde kullanarak mutlak yol gereksinimini karşılayabilirsinizsource "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
Leo Gallucci

Benim için çalışmıyor. Mac OS X. Bundler v1.11.2:Could not fetch specs from file://Users/nakilon/....../
Nakilon

44

Geminizi uygulama satıcısı klasöründe açarım

gem unpack your.gem --target /path_to_app/vendor/gems/

Ardından, paketlenmemiş taşı bağlamak için Gemfile üzerindeki yolu ekleyin.

gem 'your', '2.0.1', :path => 'vendor/gems/your'

29

Varsayılan olarak Bundler önce sisteminizi kontrol eder ve bir mücevher bulamazsa Gemfile dosyasında belirtilen kaynakları kullanır.


Doğru. ama daha önce yüklemediysem? (bir sunucuya konuşlandırırken) Bitmiş olan kaynak komutlarının hiçbirinde Imlib2-Ruby-0.5.2 bulunamadı
ddayan

184
gem "gemname", yerel bir dizine işaret edebilirsiniz: path => "~ / some / local / path"
JHurrah

5
Bence: yol gemspec dosyası ile gem klasörü gerektirir. Yüklemek istediğim yalnızca .gem dosyalarım var.
ddayan

1
Tamam bu yüzden kap konuşlandırma geçti, ancak mücevher "Yüklenecek böyle bir dosya yok
vips

4
Bu kesinlikle doğru değil, en azından artık. Bundler yok değil sistem taşlar bakmak ve sadece Gemfile içinde ne kadar gider. Bunun korkunç nedenlerinden biri.
bioneuralnet

6

Bundler'ı, "bundle package" ve "bundle install --local" kullanarak dağıttığınız taşları kullanmaya zorlayabilirsiniz

Geliştirme makinenizde:

bundle install

(Gerekli taşları yükler ve Gemfile.lock yapar)

bundle package

(Satıcı / önbellekteki değerli taşları önbelleğe alır)

Sunucuda:

bundle install --local

(--local "satıcı / önbellekteki değerli taşları kullan" anlamına gelir)


Sunucuya hiçbir şey yükleyemezsem ne olur? Bu durumda, komisyon ile inşa etmek gerekiyor ama sunucunun bina için kullandığım bir mücevher yok; ama bağımlılıkları kontrol etmede sorunum yok.
Henrik

Gem mevcut Gemfile kaynağımda yer almasaydı "paket yükleme" benim için çalışmadı.
Anna

Bunu yapmadan önce gem dosyasını geçici olarak gem dosyasını kaldırın. bundle installBundan sonra gemfile'i satıcıya / önbelleğe kopyalayın, gem'i gemfile'a geri ekleyin ve çalıştırın bundle install --local
bert bruynooghe

1
bundle packageüç yıl sonra bile şimdi bile harika bir öneri. Bundler sürümünüz 2.0'dan daha eskiyse (henüz bu yazıda yayınlanmamışsa), bundle package --alldeğerli taşlar pathveya gitbağımlılıklar eklemek istiyorsanız kullanmanız gerekecektir . Yine de, bu tür bağımlılıkları tespit ederse size yardımcı olacak bir hatırlatma verecektir.
L2G

1
Bilginize: Bu, dağıttığınızdan farklı bir platformda geliştirirseniz (örneğin macOS üzerinde geliştir, Linux'a dağıt) umduğunuz kadar iyi çalışmayabilir. Gereğince --localdocs: "Bir uygun platforma özgü taş rubygems.org üzerinde varsa Not onu buldum olmayacak."
Liam Dawson

1

Ekleme .gemiçin vendor/cacheişe görünmektedir. Konumunda seçeneğe gerek yok Gemfile.


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.