2012-01-19 11 views
10

arasındaki fark nedir? the gemfile man page'dan, içe aktarma öğesinin Gemfile'da belirttiğiniz taşlar için iki yol olduğunu öğrendim. bundle.setup, "kurgu Ruby'nin yükleme yoluna mücevherler ekler" iken, bundle.require tüm mücevherleri gerektirecektir.bundle.setup ve bundle.require

Bu iki yöntem arasındaki fark nedir? Bunlardan birini hangi şartlarda kullanmalıyım?

+0

Bkz http://anti-pattern.com/use-bundler-setup-instead-of-bundler-require ve http://myronmars.to/ n/dev-blog/2012/12/5-neden-önlemek-için-paketleyici-neden Bundler kurulum (ihtiyaç yerine) kullanmanız ve sonra bağımlılıklarını elle gerektirir bazı katı muhakeme gerektirir. –

cevap

19

Bundler.setup, LOAD_PATH öğesini değiştirir, böylece require 'some_gem' gibi şeyler yapabilirsiniz ve çalışacaklardır. Mücevherlere elle ihtiyaç duymanızı sağlar. Bundler'dan önce, Rubygems kullanarak, require 'rubygems' ile aynı etkiyi gerçekleştirirsiniz. Öte yandan, gerçekte tüm taşların Gemfile içinde olması gerekir (grup kullanmadığınız varsayılırsa, aksi takdirde argüman sağlarsanız belirtilen gruplarda olanlar gerekir). Bir grup require 'some_gem' ifadesi için bir shorthand var.

Bkz. http://gembundler.com/rationale.html. Bundler.require'u yapmadan önce require 'bundler/setup' yapman gerektiğini söylediler, ancak pratikte bu genellikle gerekli değildir. Ben Bundler.require aracılığıyla tüm taşlar gerektirir çünkü ben neredeyse hiç Bundler.setup (veya require 'bundler/setup) kullanmayın. Son zamanlarda paketleyici sürümü için gerekli değildir

+1

Eğer doğru anlarım, 'Bundler.setup' + bir demet' require' ifadesi Bundler.require', eşittir? – steveyang

+0

Evet, doğru. – Confusion

5

Bundle.setup kullanmanız gerekir ve Bundle.require'u kullanabilirsiniz.

Demetleyicinin temel noktası, Gemfile'da tanımlanan Taşların tam olarak göründüğünden emin olmaktır, yani, burada bahsedilen tüm sürümlerde belirtilen tüm taşlar, ancak bir tane daha değil. Bunu yapmak için, yük yolu uyarlanmıştır. Bu Bundle.setup tarafından yapılır. Mücevherleri fiilen kullanmak için gerekli olması ve dolayısıyla uygulamaya yüklenmesi gerekmektedir. Bu, require ifadelerinin bir dizi kullanılarak elle veya Bundle.require kullanarak Gemfile (veya sadece bazı gruplar) listelenen tüm taşlar için otomatik olarak yapılabilir. Ancak bu, ancak yukarda bahsedildiği gibi yük yolunu uyarladıktan sonra mümkündür.

0

Bundle.setup. aslında, Bundler.require çalıştırdığınızda, her zaman sizin için doğru $LOAD_PATH ayarlamayı deneyin.

tek ihtiyaçtır:

require 'bundler' Bundler.require