2011-11-26 12 views
69

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

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

उत्तर

101

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

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

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

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

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

+4

यदि आप हर समय बंडल निष्पादन टाइप करने से थक जाते हैं, तो आप आरवीएम को कॉन्फ़िगर कर सकते हैं, इसलिए यह आवश्यक नहीं है: http://ruby.railstutorial.org/chapters/static-pages#sec:eliminating_bundle_exec –

+1

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

+1

'बंडल निष्पादन' का उपयोग करने का एक अच्छा दुष्प्रभाव यह है कि यह आपको भी बताएगा यदि आपको Gemfile.lock फ़ाइल की तुलना में याद आ रही रत्नों के संस्करण स्थापित करने के लिए 'बंडल इंस्टॉल' चलाया जाना चाहिए। –

1

bundle exec के बिना किसी भी निष्कासित चलने वाले रूबीगेम्स आपके सिस्टम में स्थापित मणि के नवीनतम संस्करण को प्राप्त करेंगे।

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

4

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

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

लेकिन Gemfile.lock किसी विशेष संस्करण निर्दिष्ट नहीं है - यह एक संस्करण x.y से अधिक निर्दिष्ट करता है!
फिर नियम होना चाहिए: रेक कि वर्तमान gemset में स्थापित किया गया था के संस्करण का उपयोग करता है।

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

$ which rake 

तो अगर आप पर अमल,

$ rake db:migrate 

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

$ rake db:migrate 

चीजों को पेंच कर सकते हैं: इसलिए, कई मायनों कि अभी कर रहे हैं।

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

+0

अच्छा एक, धन्यवाद –

संबंधित मुद्दे