2015-10-05 13 views
5

Windows 7'de Ruby 2.1 ve Rails 4.1 kullanıyorum. bundle install'u her çalıştırdığımda, tüm taşlar sistem yolunda c:/Ruby21/lib/ruby/gems/2.1.0/gems/ yüklenir. Projemde vendor dizinini de buldum. PHP composer ve node.js npm kökenli geliyorSistem havuzuna (global olarak) veya proje satıcısına/paketine (yerel olarak) ruby ​​gems yüklemem gerekir mi?

, bütün bağımlılıklar yerel proje vendor klasör veya node_modules klasöründe yüklü olmalıdır. Yani, sorularım şunlardır:

  1. ben sistem yolu veya vendor/bundle mücevherleri yüklemeli miyim?
  2. Tüm mücevherler veya bazı taşlar sistem yoluna kurulursa, kabuk erişiminin olmadığı üretim ortamını nasıl etkiler?
  3. Tüm mücevherler veya belirli taşlar vendor/bundle'a kurulur mu?
  4. Taşları vendor/bundle içine nasıl yükleyebilirim?

cevap

6

bundle install'u çalıştırdığınızda, Bundler adlı bir araç kullanıyorsunuz.

  1. Bundler Composer gibi benzer şekilde bağımlılıkları yönetimiyle ilgilenir, ancak bunun yerine proje klasöründeki her şeyi yükleme, sizin taşlar sistem genelinde, tüm proje arasında paylaşılır yükler. Proje klasörünüzde Gemfile'ı kullanarak hangi kitaplıkların gerektirdiğini izler. Böylelikle Bundler'in işini yapmasına izin vermelisiniz, çok iyi ve Rails için standart paket yöneticisidir.

  2. ev sahibi Yakut ve Raylar uygulamalarını destekler (örneğin, Heroku gibi bir PaaS), kesinlikle destek Bundler ve gerekli tüm taşlar kurulacaktır olacak. Kabuk erişimi olmadan ucuz bir paylaşımlı barındırma hakkında konuşuyorsanız, bir Ruby uygulamasını orada dağıtmayacaksınız çünkü gerçek Ruby yorumlayıcısını ve kabuk erişimi gerektiren diğer şeyleri yüklemeniz gerekecek.

  3. sayılı

    Güvenmemelisin. Orada bunu nasıl açıklayan this article, ama yüklemeden taşlar küresel aynı makinede diğer projeler içine sızan ve rahatsız edici garip bir duruma neden oldu

    sayısız kez hata ayıklamak için geliyor bana

    Bu yazının yazarı sadece başına geldi ve Bundler'ın hatalı olduğunu sanmıyorum. Her durumda, bundle exec (bundle exec rspec'da olduğu gibi) ile her zaman taş komutlarını eklemelisiniz ve belirtilen soruna asla sahip olmayacaksınız. bundle exec, bir gemiden bir komutu çalıştırdığınızda, Gemfile'ınızda tanımlı doğru sürümün çağrıldığından emin olursunuz, sisteminizde aynı geminin birkaç sürümü varsa, bu önemlidir.

RVM popüler iken Birkaç yıl önce, gemsets benzer amacına ulaşmış ama çoğunlukla rbenv ve Bundler tarafından kaldırılmış var.

+3

Sanırım, "bundle exec" nin gerekli olduğunu ve neden gerekli olduğunu biraz kötü bir şekilde ilettiğini düşünüyorum, bu yüzden insanlar sık ​​sık bağımlılıkların proje klasörüne yüklenmesi gerektiğini düşünüyor. Ayrıca, çoğu diğer paket yöneticileri (besteci, npm, bower, vb.) Bunu yapar, böylece farklı ortak desen de kafa karıştırıcı olabilir. –

+0

Ben noktayı anlamıyorum "cevabında" bundle exec "ile her zaman taş komutlarını eklemelisiniz. – Sithu

+0

@Sithu [bu soru ve cevap] konusuna bakın (http://stackoverflow.com/questions/6588674/what-does-bundle-exec-rake-mean). Kısacası, bir gemden gelen bir komutu çalıştırdığınızda, Gemfile'ınızda tanımlanan doğru sürümün çağrıldığından emin olur. Sistemde yüklü aynı geminin birkaç sürümü varsa önemlidir. Kural olarak, projenizin bağlamında bir komutu her çalıştırdığınızda, 'bundle exec' ile eklemelisiniz. – p4sh4

İlgili konular