2012-07-19 21 views
5

मैं डेवलपर्स की एक टीम के साथ काम कर रहा हूं, और हम सभी हमारे भंडार से एक ही जेमफाइल का उपयोग कर रहे हैं। क्योंकि मैं मैक पर काम कर रहा हूं, और अन्य उबंटू का उपयोग कर रहे हैं, हमारे पास हमारे रिपोजिटरी में एक Gemfile.local.example फ़ाइल है, साथ ही प्रत्येक ओएस के लिए उपयुक्त अधिसूचना रत्न भी है, सभी ने टिप्पणी की।मैं अपने आवेदन के लिए एकाधिक Gemfiles का उपयोग कैसे कर सकता हूं?

मैंने अपने ओएस के लिए रत्नों पर टिप्पणी नहीं की और एक नई फ़ाइल के रूप में सहेजा, संस्करण नियंत्रण में नहीं, Gemfile.local। अब मैं दोनों फाइलों से रत्न स्थापित करने के लिए "बंडल इंस्टॉल" करना चाहता हूं।

मुझे ऐसा करने पर कोई अच्छा दस्तावेज नहीं मिल रहा है।

+2

http://stackoverflow.com/questions/7962743/bundler-load-multiple-gemfiles – Conner

उत्तर

5

मैं मानता हूँ कि दो Gemfiles का उपयोग कर बुरा अभ्यास है, और एक समाधान है कि मेरे Gemfile में platform ध्वज के साथ RUBY_PLATFORM लगातार शामिल है मिल गया है। यह सबसे सुंदर समाधान नहीं हो सकता है, लेकिन यह मेरे लिए काम करता है।

यहाँ उत्सुक पाठकों के लिए मेरी कोड का एक हिस्सा है:

group :development, :test do 
    # Mac OSX notifications 
    gem 'growl_notify' if RUBY_PLATFORM.downcase.include?("darwin") 
    gem 'growl' if RUBY_PLATFORM.downcase.include?("darwin") 

    # Gnome notifications => aka for Linux 
    gem 'libnotify' if RUBY_PLATFORM.downcase.include?("linux") 

    # Guard-spork doesn't work with windows but it's 
    # awesome for other Operating Systems. 
    gem 'guard-spork' if RUBY_PLATFORM.downcase.include?('darwin') || RUBY_PLATFORM.downcase.include?('linux') 

    # Windows Rubies (RubyInstaller) 
    platforms :mswin, :mingw do 
    # Windows notifications 
    gem 'rb-notifu' 
    end 
end 
7

क्यों नहीं सिर्फ एक Gemfile है और groups जैसी चीजों का उपयोग करें या :platform ध्वज का उपयोग केवल Ubuntu पर ओएस एक्स पर कुछ जवाहरात और अन्य लोगों के स्थापित करने के लिए?

दो Gemfiles रखने के लिए बहुत अनावश्यक लगता है। यदि आप वास्तव में ऐसा करना चाहते हैं, तो आप bundle config (man page) पर उपयोग करने के लिए जेमफाइल की आपूर्ति कर सकते हैं।

+0

यह अद्भुत है की संभावित डुप्लिकेट, मैं था मंच विकल्प के बारे में पता नहीं है। मैं अपने Gemfile में एक RUBY_PLATFORM निरंतर के साथ सशर्त उपयोग कर रहा था। बहुत साफ! –

+0

'प्लेटफ़ॉर्म' ध्वज का उपयोग करना सबसे सुरुचिपूर्ण समाधान प्रतीत होता है, लेकिन ऐसा लगता है कि 'प्लेटफ़ॉर्म: रूबी' ओएसएक्स और उबंटू संदर्भ देता है, जबकि 'प्लेटफॉर्म: एमएसविन,: मिंगव' संदर्भ विंडोज़। मुझे ओएसएक्स और उबंटू के बीच निर्दिष्ट करने की आवश्यकता है। [यह पृष्ठ] (http://yopefonic.wordpress.com/2011/06/23/multi-platform-ruby-development-with-bundler/) RUBY_PLATFORM निरंतर उपयोग करने का सुझाव देता है। क्या कोई और तरीका है? – dudeitsdevin90

0

आपको सभी को उसी Gemfile का उपयोग करना चाहिए और एक मास्टर Gemfile.lock भी परिचालित होना चाहिए। कम से कम यह आदर्श है।

याद रखें कि आप Bundle.setup द्वारा कौन से अनुभाग लोड किए गए हैं, यह अलग करने के लिए रूबी का उपयोग कर सकते हैं और आप उन चीजों को परिभाषित करने के लिए समूहों का उपयोग कर सकते हैं जो किसी विशेष प्लेटफ़ॉर्म के लिए प्रासंगिक हैं।

Gemfile.lock को एप्लिकेशन को तैनात करने के लिए विशिष्ट आवश्यकताओं का प्रतिनिधित्व करना चाहिए। यह संस्करण नियंत्रण प्रणाली में होना चाहिए, इसलिए इस बात पर कोई भ्रम नहीं है कि एप्लिकेशन किस संस्करण के साथ लॉन्च होगा। यदि यहां प्लेटफ़ॉर्म समस्याएं हैं, तो आपको अपने द्वारा उपयोग किए जाने वाले कार्यों के बारे में सावधान रहना चाहिए, और जहां आवश्यक हो, निर्भरता को केवल :development समूह पर लॉक करें।

1

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

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

https://rvm.io//