2015-10-05 6 views
5

मैं विंडोज 7 पर रूबी 2.1 और रेल 4.1 का उपयोग कर रहा हूं। जब भी मैं bundle install चलाता हूं, तो सभी रत्न सिस्टम पथ c:/Ruby21/lib/ruby/gems/2.1.0/gems/ में स्थापित होते हैं। मुझे अपनी परियोजना में vendor निर्देशिका भी मिली।क्या मुझे सिस्टम रिपोजिटरी (वैश्विक रूप से) या प्रोजेक्ट विक्रेता/बंडल (स्थानीय रूप से) में रूबी रत्न स्थापित करना चाहिए?

पीएचपी composer और node.js npm पृष्ठभूमि से आ रहा है, सभी निर्भरता स्थानीय स्तर पर परियोजना vendor फ़ोल्डर या node_modules फ़ोल्डर में स्थापित किया जाना चाहिए। तो, मेरे प्रश्न हैं:

  1. क्या मुझे सिस्टम पथ या vendor/bundle में रत्न स्थापित करना चाहिए?
  2. यदि सभी रत्न या कुछ रत्न सिस्टम पथ में स्थापित किए जाने चाहिए, तो यह उत्पादन वातावरण को कैसे प्रभावित कर सकता है जहां मेरे पास खोल का उपयोग नहीं हो सकता है?
  3. क्या सभी रत्न या विशिष्ट रत्न vendor/bundle में स्थापित किए जाने चाहिए?
  4. मैं vendor/bundle में रत्न कैसे स्थापित कर सकता हूं?

उत्तर

6

जब आप bundle install चलाते हैं, तो आप Bundler नामक टूल का उपयोग कर रहे हैं।

  1. Bundler संगीतकार के रूप में एक समान तरीके से अपने निर्भरता के प्रबंधन का ख्याल रखता है, लेकिन इसके बजाय प्रोजेक्ट फ़ोल्डर में सब कुछ स्थापित करने की, यह आपके जवाहरात सिस्टम-वाइड, कि अपने सभी परियोजनाओं के बीच साझा कर रहे हैं स्थापित करता है। यह आपके प्रोजेक्ट फ़ोल्डर में जेमफाइल का उपयोग करके कौन सी प्रोजेक्ट की आवश्यकता है, इसका ट्रैक रखता है। इसलिए, आपको बस बंडलर को अपनी बात करने देना चाहिए, यह बहुत अच्छा है और रेल के लिए मानक पैकेज प्रबंधक है।

  2. आपके मेजबान रूबी और रेल अनुप्रयोगों का समर्थन करता है (उदाहरण के लिए, Heroku की तरह एक PaaS), यह निश्चित रूप से समर्थन Bundler और सभी आवश्यक जवाहरात स्थापित किया जाएगा होगा। यदि आप शैल एक्सेस के बिना सस्ते साझा होस्टिंग के बारे में बात कर रहे हैं, तो आप वैसे भी रुबी एप्लिकेशन को तैनात नहीं कर पाएंगे क्योंकि आपको वास्तविक रूबी दुभाषिया और अन्य चीजों को स्थापित करने की आवश्यकता होगी, जिसके लिए खोल पहुंच की आवश्यकता होगी।

  3. सं

  4. आप नहीं करना चाहिए। वहाँ this article इसे कैसे करना का वर्णन है, लेकिन यह है कि

    अनगिनत बार जहां स्थापित करने जवाहरात विश्व स्तर पर एक ही मशीन पर अन्य परियोजनाओं में लीक और अजीब व्यवहार है कि कष्टप्रद था करने के लिए नेतृत्व डिबग करने के लिए मुझे लगता है

    इस आलेख के लेखक के साथ कभी भी हुआ है, और मुझे नहीं लगता कि बंडलर गलती में है। किसी भी मामले में, आपको हमेशा bundle exec (bundle exec rspec में) के साथ मणि कमांड को प्रीपेड करना चाहिए और आपके पास कभी भी समस्या नहीं होगी। bundle exec यह सुनिश्चित करता है कि जब आप किसी मणि से कमांड निष्पादित करते हैं, तो आपके जेमफाइल में परिभाषित सही संस्करण कहा जाता है, यदि आपके सिस्टम में एक ही मणि के कई संस्करण हैं तो यह महत्वपूर्ण है।

कुछ साल पहले जब RVM लोकप्रिय था, gemsets एक समान लक्ष्य को हासिल किया लेकिन ज्यादातर rbenv और Bundler तक बहिष्कृत कर दिया गया।

+3

मुझे लगता है कि यह थोड़ा बुरी तरह से सूचित किया गया है कि 'बंडल निष्पादन' की आवश्यकता है और इसकी आवश्यकता क्यों है, इसलिए लोगों को आम तौर पर लगता है कि परियोजना फ़ोल्डर में निर्भरता स्थापित की जानी चाहिए। इसके अलावा, अधिकांश अन्य पैकेज प्रबंधक (संगीतकार, एनपीएम, बोवर, आदि) ऐसा करते हैं, इसलिए विभिन्न आम पैटर्न भी भ्रमित हो सकते हैं। –

+0

मुझे इस बिंदु के बारे में समझ में नहीं आता है "आपको जवाब में हमेशा 'बंडल exec'' के साथ मणि कमांड को प्रीपेड करना चाहिए। – Sithu

+0

@ सिथु देखें [यह प्रश्न और उत्तर] (http://stackoverflow.com/questions/6588674/what-does-bundle-exec-rake-mean)। संक्षेप में, यह सुनिश्चित करता है कि जब आप एक मणि से कमांड निष्पादित करते हैं, तो आपके Gemfile में परिभाषित सही संस्करण कहा जाता है। यह महत्वपूर्ण है यदि आपके पास सिस्टम में स्थापित एक ही मणि के कई संस्करण हैं। एक नियम के रूप में, हर बार जब आप अपनी परियोजना के संदर्भ में एक आदेश निष्पादित करते हैं, तो आपको इसे 'बंडल निष्पादन' के साथ पूर्ववत करना चाहिए। – p4sh4

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

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