Bundle exec rake mi yoksa sadece rake mi kullanacaksınız?


84

Rails'i sadece rake komutunu kullanarak öğrendim rake db:migrate; ancak, bundle exec rake ...sade yerine 'yi kullanmam gerektiğini okudum rake. Şimdi hangisini kullanacağım konusunda kafam karıştı.

Basit bundle exec rakeyerine kullanmalı mıyım rakeyoksa bu sadece bir tercih meselesi mi? Herhangi bir görüş çok takdir edilecektir! Teşekkürler!

Yanıtlar:


129

bundle exec paketinizin bağlamında bir komut yürütür.

Bu, Gemfile'ınızda belirtilen mücevherleri kullandığı anlamına gelir. Çoğu zaman, koşmak , özellikle de Gemfile'ınızda olduğu gibi sistem genelinde kurulu aynı mücevherler varsa, bundle exec rake fookoştuğunuz gibi aynı sonuçları rake fooverir. Bununla birlikte, bazı uygulamalar, sistem genelinde yüklediğinizden farklı mücevher sürümlerini belirtebilir ve tam olarak bu mücevherlerin ve sürümlerin doğru şekilde çalışmasını isteyebilir. Sadece onsuz koşarsanız bundle exec, bazı garip hatalar alabilirsiniz.

bundle execGarantilerin kullanılması , programın gemfile'da belirtilen ortamla çalıştırıldığını garanti eder; bu, umarız, programın yaratıcılarının çalıştırılmasını istediği ortam anlamına gelir; senin bilgisayarın.

Temel olarak programın çalıştırıldığı ortamı standartlaştırır. Bu, sürüm cehennemini önlemeye yardımcı olur ve hayatı çok daha kolaylaştırır.

Daha fazla bilgi için http://bundler.io/v1.3/man/bundle-exec.1.html bakın .


4
Her zaman bundle exec yazmaktan sıkılırsanız, rvm'yi gerekli olmayacak şekilde yapılandırabilirsiniz: ruby.railstutorial.org/chapters/…
Lance Fisher

1
Not: Bundle kılavuz
Americo Savinon

1
Kullanmanın güzel bir yan etkisi bundle execde bundle install, Gemfile.lock dosyasına kıyasla eksik olduğunuz mücevherlerin sürümlerini yüklemek için çalıştırmanız gerekip gerekmediğini size söyleyecektir .
Jay Mitchell

Çok güzel anlattın .. Teşekkürler.
Arup Rakshit

5

$ bundle exec rake db: migrate
Rake görevini yürütmek için Gemfile'da belirtilen komisyon sürümünü kullanır db:migrate.

Ancak Gemfile'da tırmık mücevheri belirtilmemiş!
Evet, ancak Gemfile.lock'a başka bir cevherin bağımlılığı olarak bir komisyon taşı kuruldu. Yani kural şöyle olmalıdır: Gemfile.lock'ta belirtilen rake sürümünü kullanır.

Ancak Gemfile.lock belirli bir sürümü belirtmez - xy'den büyük bir sürümü belirtir!
O zaman kural şu ​​olmalıdır: Mevcut mücevher setinde kurulu olan tırmık versiyonunu kullanır.

$ rake db: migrate
Normalde, komut satırında bir komut verdiğinizde, örneğin rake, sisteminiz komutu PATH ortam değişkeninizde belirtilen dizinler listesinde arar. Komutu içeren ilk dizin, kullanılan komutun sürümüdür. Bunun hangi dizini olduğunu görmek için şunları yapabilirsiniz:

$ which rake

Yani eğer yürütürseniz,

$ rake db:migrate

bu , yüklediğinizden farklı bir tırmık taşı kullanabilir bundle install. Ancak, sisteminiz ile aynı tırmık sürümünü bundle execbulsa bile, komisyon kaynak kodunun gerektirdiği tüm taşlar, projenizin mücevher setinin dışındaki yerlerde aranacaktır. Bu nedenle, şunları yapmanın birçok yolu vardır:

$ rake db:migrate

işleri alt üst edebilir.

Ruby on Rails Eğitim Kitabı'na göre (ücretsiz çevrimiçi) bölüm 3.6, rvm 1.11.x + kullanıyorsanız komutların önsözünü yapmanıza gerek yoktur bundle exec.


1

herhangi bir exacutable'ı çalıştırmadan Rubygems bundle exec, sisteminizde kurulu olan gem'in en son sürümünü getirecektir.

Bunun bundle execyerine öneki eklediğinizde, çalıştırılabilir dosya Gemfile.lock'unuz bağlamında çalışır, bu da gem dosyasında tanımlanan sürüm kullanılarak çalıştırılacağı anlamına gelir.

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.