2012-01-19 10 views
10

the gemfile man page से अंतर क्या है, मैंने सीखा है कि आयात आपके द्वारा Gemfile में निर्दिष्ट रत्न आयात करने के दो तरीके हैं। bundle.setup "सेटअप रूबी के लोड पथ में रत्न जोड़ता है" जबकि bundle.require सभी रत्नों की आवश्यकता होगी।bundle.setup और bundle.require

इन दो तरीकों के बीच क्या अंतर है? मुझे किस स्थिति में उनमें से एक का उपयोग करना चाहिए?

+0

देखें http://anti-pattern.com/use-bundler-setup-instead-of-bundler-require और http://myronmars.to/ एन/देव-ब्लॉग/2012/12/5-कारण-से-बचने-बंडलर-आपको कुछ ठोस तर्कों के लिए आवश्यकता है कि आपको बंडलर सेटअप (आवश्यकता के बजाए) क्यों उपयोग करना चाहिए और फिर मैन्युअल रूप से अपनी निर्भरताओं की आवश्यकता है। –

उत्तर

19

Bundler.setup LOAD_PATH को संशोधित करता है, ताकि आप require 'some_gem' जैसी चीजें कर सकें और वे काम करेंगे। यह आपको 'हाथ से रत्न' की आवश्यकता होती है। रूबगेम्स का उपयोग करके बंडलर से पहले, आप require 'rubygems' कर रहे एक ही प्रभाव को प्राप्त करेंगे।

Bundler.require(:default) दूसरी ओर वास्तव में जेमफाइल में सभी रत्नों की आवश्यकता होती है (माना जाता है कि आप समूह का उपयोग नहीं कर रहे हैं, अन्यथा यदि आप तर्क प्रदान करते हैं तो निर्दिष्ट समूहों में उन लोगों की आवश्यकता होती है)। यह require 'some_gem' बयान के गुच्छा के लिए एक शॉर्टेंड है।

http://gembundler.com/rationale.html देखें। ध्यान दें कि वे कहते हैं कि Bundler.require करने से पहले आपको require 'bundler/setup' करना है, लेकिन व्यवहार में यह आमतौर पर आवश्यक नहीं है। मैं लगभग Bundler.setup (या require 'bundler/setup) का उपयोग कभी नहीं करता, क्योंकि मुझे Bundler.require के माध्यम से सभी रत्नों की आवश्यकता होती है)।

+1

यदि मैं सही समझता हूं, 'बंडलर.सेटअप' + 'आवश्यकता' कथन का एक समूह 'बंडलर.रेक्वायर' के बराबर है, है ना? – steveyang

+0

हाँ, यह सही है। – Confusion

5

आपको Bundle.setup का उपयोग करना होगा और आप Bundle.require का उपयोग कर सकते हैं।

बंडलर का मुख्य बिंदु यह सुनिश्चित करना है कि जेमफाइल में परिभाषित रत्नों को एप्लिकेशन के लिए दृश्यमान बनाया गया हो, यानी बिल्कुल वर्णित संस्करणों में वर्णित सभी रत्न, लेकिन एक और नहीं। ऐसा करने के लिए, लोड पथ अनुकूलित किया गया है। यह Bundle.setup द्वारा किया जाता है।

वास्तव में रत्नों का उपयोग करने के लिए, उन्हें आवश्यक होना चाहिए और इस प्रकार आवेदन में लोड किया जाना चाहिए। यह Bundle.require का उपयोग करके Gemfile (या केवल कुछ समूहों) में सूचीबद्ध सभी रत्नों के लिए स्वचालित रूप से require कथनों का उपयोग करके या हाथ से किया जा सकता है। हालांकि ऊपर वर्णित लोडपैथ को अपनाने के बाद यह संभव है।

0

Bundle.setup हाल ही में बंडलर संस्करण के लिए आवश्यक नहीं है। वास्तव में, जब आप Bundler.require चलाते हैं, तो यह हमेशा आपके लिए सही $LOAD_PATH सेट करने का प्रयास करता है।

केवल जरूरत है:

require 'bundler' Bundler.require