2011-09-07 7 views
10

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

लेकिन हाल ही में मुझे कुछ परियोजनाओं पर काम करना पड़ा जो पिछले 6 महीनों के लिए विकास में थे। उस प्रोजेक्ट में, गेमफाइल में केवल कई मणि संस्करण निर्दिष्ट किए गए थे और Gemfile.lock को अनदेखा कर दिया गया था। इसने अंततः संस्करण संघर्षों को हल करने और कुछ रत्नों को अपग्रेड करने के लिए बहुत सी सिरदर्द पैदा की। Yehuda से अच्छा लेख - -

भी पता चला है कि यह बुरा व्यवहार आवेदन संस्करण नियंत्रण से Gemfile.lock दूर करने के लिए है मिल गया http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/

तो, मेरे सवाल का मैं मैं Gemfile में specifiy हर मणि के लिए संस्करण निर्दिष्ट करना चाहिए है या सिर्फ नाम और बंडलर संस्करण का ख्याल रखना होगा? इसे संभालने का सबसे अच्छा अभ्यास क्या है?

अद्यतन -

इस सवाल का अद्यतन कर रहा है सही ढंग से एक Gemfile sovles कई समस्याओं :)

समस्या 1 के रूप में, समस्या निर्दिष्ट करने के लिए - हर डेवलपर रत्नों का एक ही संस्करण होना चाहिए। वास्तव में संस्करण नियंत्रण में Gemfile.lock जोड़ना इस समस्या को हल किया। डेवलपर्स को सिर्फ यह ध्यान रखना होगा कि वे 'बंडल अपडेट' के बजाए 'बंडल इंस्टॉल'/'बंडल' चलाते हैं क्योंकि इससे संस्करण भी अपडेट होंगे।

प्रो 2 - कुछ रत्न संस्करण, यदि बदल गया है, तो ब्रेक एप्लिकेशन कोड। असल में omniauth के साथ, इस प्रकार के मुद्दे हैं, क्योंकि एपीआई एक संस्करण से दूसरे संस्करण में बदल दिया गया है। और हाँ, एप्लिकेशन को काम करने के लिए, इस रत्न के लिए संस्करणों को निर्दिष्ट करने की आवश्यकता होगी।

मेरी समस्या। - तो, मेरे जीमेलफ़ाइल में, ए और बी दोनों के संस्करणों को कड़ाई से निर्दिष्ट किया गया है, और क्योंकि वे दोनों ज़ेड के विभिन्न संस्करणों पर निर्भर करते हैं, जो निर्भरता है, मैं भी बंडल इंस्टॉल या बंडल अपडेट नहीं चला सकता। एकमात्र समाधान संस्करणों को हटाना था और कॉल करने के लिए बंडलर को देना था। यही कारण है कि मेरे पास सवाल था - Gemfile.version_specification_mandatory? # => सत्य/झूठा

+0

अच्छा सवाल। इसने मेरी जिज्ञासा का भी उत्तर दिया, क्योंकि मैं मणि संस्करणों को निर्दिष्ट कर रहा हूं! – fregas

उत्तर

0

मैंने चर्चा की सभी बिंदुओं पर विचार करते हुए एक ब्लॉग पोस्ट लिखा था।

यहां एक नज़र डालें - http://rtdptech.com/2011/09/specifying-gem-versions-in-gemfile-for-rails-application/

+2

लिंक टूटा हुआ है। अगली बार, SO में उत्तर को सारांशित करने का प्रयास करें। –

2

यदि आप किसी विशिष्ट संस्करण में उपलब्ध कुछ के लिए मणि का उपयोग कर रहे हैं, तो आपको संस्करण निर्दिष्ट करने की आवश्यकता है।

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

मुझे इन समस्याओं का सामना करना पड़ा है विशेष रूप से 3 के रिलीज उम्मीदवार संस्करणों को पेजेट करने के लिए।

+0

वास्तव में यदि आप Gemfile.lock साझा करते हैं तो ऊपर उल्लिखित समस्या में वृद्धि नहीं होगी। पहली बार डेवलपर मणि जोड़ता है और 'बंडलर' चलाता है जो संस्करण लॉक होता है और सभी डेवलपर्स द्वारा Gemfile.lock से उपयोग किया जाएगा। मैं वास्तव में क्या जानना चाहता हूं - जैसा कि Gemfile.lock विशेष रूप से संस्करण को लॉक करने के लिए है, क्या हमें अभी भी जेमफाइल में संस्करणों को जनादेश के रूप में निर्दिष्ट करना चाहिए? – rtdp

6

मुझे लगता है कि जेमफ़ाइल में मणि संस्करण निर्दिष्ट नहीं है। दुर्लभ मौकों पर, एक संस्करण निर्दिष्ट करना आवश्यक हो सकता है - उदाहरण के लिए, जब कोई नया संस्करण आपके ऐप को तोड़ देता है। लेकिन आपके सभी रत्नों के लिए संस्करण निर्दिष्ट करना आम तौर पर अधिक होता है। Gemfile.lock फ़ाइल (जिसे आप संपादित नहीं करते हैं, लेकिन आप संस्करण नियंत्रण में जांच करते हैं) आपके ऐप में उपयोग किए जाने से रत्नों की नई रिलीज बनाए रखेगा, जब तक आप उन्हें स्पष्ट रूप से अपग्रेड नहीं करते।

+0

हां, मैं आपसे रूडर से सहमत हूं। मैं इस सवाल को भी अद्यतन करता हूं कि मैं वास्तव में क्या देख रहा था। धन्यवाद। – rtdp

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