बंडल निष्पादन रेक या सिर्फ रेक का उपयोग करें?


84

मैंने केवल रेक कमांड का उपयोग करके रेल सीखी rake db:migrate; हालाँकि, मैंने पढ़ा कि मुझे bundle exec rake ...सिर्फ सादे के बजाय इसका उपयोग करना चाहिए rake। अब मैं उलझन में हूं कि किसका उपयोग करूं।

क्या मुझे bundle exec rakeसिर्फ सादे के बजाय उपयोग करना चाहिए rakeया यह सिर्फ एक प्राथमिकता वाली चीज है? किसी भी जानकारी के लिए बहुत सराहना की जाएगी! धन्यवाद!

जवाबों:


129

bundle exec अपने बंडल के संदर्भ में एक कमांड निष्पादित करता है।

इसका मतलब है कि यह आपके जेमफाइल में निर्दिष्ट रत्नों का उपयोग करता है। ज्यादातर समय, दौड़ने bundle exec rake fooका एक ही परिणाम होता है जैसे कि आप अभी-अभी भागे हैं rake foo, खासकर यदि आपके पास वही रत्न हैं जो आपके रत्न के रूप में व्यवस्थित हैं। हालाँकि, कुछ एप्लिकेशन रत्नों के अलग-अलग संस्करणों को निर्दिष्ट कर सकते हैं, जिन्हें आपने सिस्टमवाइड इंस्टॉल किया है, और हो सकता है कि वे सही रत्नों और संस्करणों को सही ढंग से चलाने में सक्षम हों। यदि आप बिना भाग दौड़ करते हैं bundle exec, तो आपको कुछ अजीब त्रुटियां हो सकती हैं।

bundle execगारंटी का उपयोग करते हुए कि कार्यक्रम को मणिभ में निर्दिष्ट वातावरण के साथ चलाया जाता है, जिसका अर्थ है कि उम्मीद है कि यह पर्यावरण है कि कार्यक्रम के निर्माता चाहते हैं कि इसे चलाया जाए, जिसका मतलब है कि इसे सही ढंग से चलाना चाहिए चाहे आपके पास कोई भी अजीब सेटअप हो आपका कंप्यूटर।

यह मूल रूप से पर्यावरण को मानकीकृत करता है जिसके तहत कार्यक्रम चलाया जाता है। यह संस्करण नरक से बचने में मदद करता है और जीवन को बहुत आसान बनाता है।

अधिक जानकारी के लिए http://bundler.io/v1.3/man/bundle-exec.1.html देखें ।


4
यदि आप हर समय बंडल निष्पादन को टाइप करते हुए थक जाते हैं, तो आप आरवीएम
लांस फिशर

1
नोट: बंडल मैन पेज बदल गया, इस तिथि के अनुसार सही है: bundler.io/v1.3/man/bundle-exec.1.html
अमेरिको साविनन

1
उपयोग करने का एक अच्छा साइड-इफेक्ट bundle execयह है कि यह आपको यह भी बताएगा कि क्या आपको bundle installरत्न के संस्करणों को स्थापित करने के लिए चलाना चाहिए जो कि आप Gemfile.lock फ़ाइल की तुलना में गायब हैं।
जे मिशेल

आपने इसे बहुत अच्छे से समझाया है .. धन्यवाद।
अरूप रक्षित

5

$ बंडल
निष्पादित रेक डीबी: माइग्रेट रेक कार्य को निष्पादित करने के लिए जेमफाइल में निर्दिष्ट रेक के संस्करण का उपयोग करता है db:migrate

लेकिन जेमफाइल में कोई रेक रत्न निर्दिष्ट नहीं है!
हां, लेकिन एक रेक रत्न को किसी अन्य रत्न की निर्भरता के रूप में स्थापित किया गया था - जेमफाइल.लॉक में देखें। तो नियम होना चाहिए: Gemfile.lock में निर्दिष्ट रेक के संस्करण का उपयोग करता है।

लेकिन Gemfile.lock एक विशिष्ट संस्करण निर्दिष्ट नहीं करता है - यह xy से बड़ा संस्करण निर्दिष्ट करता है!
फिर नियम होना चाहिए: रेक के संस्करण का उपयोग करता है जो वर्तमान रत्न में स्थापित किया गया था।

$ रेक डीबी:
सामान्य रूप से माइग्रेट करें , जब आप कमांड लाइन पर एक कमांड जारी करते हैं, उदाहरण के लिए रेक, आपका सिस्टम आपके पैथ वातावरण चर में निर्दिष्ट निर्देशिकाओं की सूची में कमांड के लिए खोज करता है। पहली निर्देशिका जिसमें कमांड शामिल है वह कमांड का संस्करण है जिसका उपयोग किया जाता है। यह देखने के लिए कि कौन सी निर्देशिका है, आप कर सकते हैं:

$ which rake

इसलिए यदि आप निष्पादित करते हैं,

$ rake db:migrate

कि आप के साथ स्थापित की तुलना में एक अलग रेक रत्न का उपयोग कर सकते हैं bundle install। लेकिन, भले ही आपका सिस्टम उसी रेक संस्करण को खोजता bundle execहै, रेक स्रोत कोड द्वारा आवश्यक किसी भी रत्न को आपके प्रोजेक्ट के रत्न के बाहर के स्थानों में खोजा जाएगा। इसलिए, कई तरीके हैं जो बस:

$ rake db:migrate

चीजों को पेंच कर सकते हैं।

रूबी ऑन रेल्स ट्यूटोरियल बुक (मुफ्त ऑनलाइन), खंड 3.6 के अनुसार, यदि आप rvm 1.11.x + का उपयोग कर रहे हैं, तो आपको आदेशों को प्रस्तुत करने की आवश्यकता नहीं है bundle exec


1

बिना किसी एक्ज़ीक्यूटेबल के चलने से रूबीमेम्स को bundle execआपके सिस्टम में स्थापित रत्न का नवीनतम संस्करण प्राप्त होगा।

bundle execइसके बजाय उपसर्ग जोड़ने से आपके Gemfile.lock के संदर्भ में निष्पादन योग्य रनिंग होगी, जिसका अर्थ है कि मणि फ़ाइल में परिभाषित संस्करण का उपयोग करके चलाया जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.