2011-09-01 9 views
25

मैं अभी शुरुआत प्रोग्रामर माइकल हार्टल द्वारा railstutorial माध्यम से जा रहा हूँ, और नोटिस gemfile में जोड़ने, और फिर कर एक के माध्यम से वह यह है कि आवेदन में जवाहरात उपयोग करने की प्रक्रिया:क्यों "बंडल स्थापित" एक रेल के लिए "मणि स्थापित" 3 ऐप्स के बजाय एक रत्न?

$ bundle install 

किसी भी कारण है कि कोई सिर्फ एक नहीं करेगा:

$ [sudo] gem install [the_gem] 

और फिर इसे जेम फ़ाइल में जोड़ें? मैं जानता हूँ कि यह कुछ हद तक प्रक्रिया वापस था रेल में 2.

धन्यवाद!

उत्तर

3
Gemfile साथ

, आपको यह सुनिश्चित किसी अन्य डेवलपर्स भी अपने अनुप्रयोग पर काम कर रहा हर मणि के समान संस्करण है कि कर सकते हैं। यह भी सुनिश्चित करता है कि आपने अपने मणिफाइल में अपने मणि कमांड में एक अलग [the_gem] नहीं डाला है।

36

सीधे अपने रत्नों को स्थापित करने के लिए मणि कमांड के बजाय बंडलर का उपयोग करके आपको बहुत सारे लाभ मिलते हैं।

इस विशिष्ट मामले में जहां आप इसे इंस्टॉल करने और इसे बाद में जेमफाइल में जोड़ने के लिए मणि कमांड का उपयोग करने का सुझाव देते हैं, तो जब आप एक मणि इंस्टॉल करते हैं तो बंडलर आपके लिए सभी निर्भरताओं को हल करेगा, जिसे आपको अन्यथा मैन्युअल रूप से हल करना पड़ सकता है।

आपको एक उदाहरण देता करने के लिए, के निम्नलिखित निर्भरता डालें:

sunspot_rails 
    nokogiri (>= 1.2.0) 

webrat 
    nokogiri (>= 1.3) 

दोनों webrat और sunspot_rails जवाहरात एक निर्भरता के रूप में nokogiri के विभिन्न संस्करणों की आवश्यकता है। यदि आप उन्हें इंस्टॉल करने के लिए मणि कमांड का उपयोग करते हैं, तो यह नॉकोगिरी के दोनों संस्करणों को स्थापित कर सकता है या संस्करण विवादों के बारे में और भी शिकायत कर सकता है। बंडलर इस निर्भरता संघर्ष को हल करने और सही संस्करण स्थापित करने के लिए पर्याप्त बुद्धिमान होगा (नोकोगिरी 1.3 कहें) और दोनों सनस्पॉट_राइल्स और बुनाई खुश करें!

लंबे विवरण के बारे में क्षमा करें। लेकिन, आशा है कि आप बिंदु प्राप्त करें! :)

और बीटीडब्ल्यू आपको इस फ़ाइल को Gemfile.lock पर देखना चाहिए ताकि यह देखने के लिए कि आपके लिए दृश्यों के पीछे क्या बंडलर है।

2

कुछ मणि संयोजन केवल विशिष्ट वातावरण में मतलब - जैसे विकास में एक निश्चित डीबी और उत्पादन में एक अलग।

जेमफ़ाइल प्रत्येक वातावरण में आपके एप्लिकेशन की आवश्यकता के रिकॉर्ड का रिकॉर्ड है, और bundle install निर्भरताओं की देखभाल करने के लिए आवश्यकतानुसार स्थापित करता है।

यदि आपके जेमफाइल में से किसी भी रत्न पहले से ही आपके वर्तमान रत्न में स्थापित है (gem install के माध्यम से), तो बंडलर केवल उनका उपयोग करेगा (उन्हें पुनर्स्थापित करने के बजाए)।

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