2011-09-07 12 views
12

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

आदर्श रूप में मैं इस तरह कुछ कर सकते हैं, लेकिन आप एक ही Bundler मणि दो बार निर्दिष्ट करने के लिए अनुमति नहीं देता:

# Doesn't work: 
group :development do 
    gem 'awesome', :path => "~/code/awesome" 
end 

group :production do 
    gem 'awesome', :path => "vendor/gems/awesome-0.0.1" 
end 

इस बीच में मैं मैन्युअल रूप से मणि & मणि स्रोत को अद्यतन करने vendoring का सहारा लिया गया है जेमफाइल में हर बार जब मैं तैनाती करता हूं, जो काफी परेशानी होती है। मेरे कार्यप्रवाह यह है:

  1. विकास के दौरान अपने स्थानीय मणि को इंगित करें (gem 'awesome', :path => "~/code/awesome")
  2. मणि vendored को इंगित करने में vendor/gems
  3. अद्यतन Gemfile तैनात करने के लिए, खोल मणि तैयार जब (gem 'awesome', :path => "vendor/gems/awesome-0.0.1")
  4. भागो bundle install (Gemfile.lock अद्यतन करने के लिए)
  5. तैनात कोड
  6. वापसी कदम 1.

क्या परेशानी है! मैं अपने वर्तमान सेटअप को स्वचालित करने के लिए बस रेक कार्यों को लिखने से कुछ क्लीनर करना चाहता हूं।

इस स्थिति के लिए सबसे अच्छा कार्यप्रवाह क्या है?

उत्तर

2

जाहिर है, आप अपने Gemfile में नियमित रूप से रूबी का उपयोग कर सकते हैं। this article के मुताबिक आप एक मणि का कौन सा संस्करण चुनना चाहते हैं, यह चुनने के लिए आप एक पर्यावरण चर (या कोई अन्य चर, मुझे मिला है) सेट कर सकते हैं।

## based on an ENV variable 
if ENV['RACK_ENV'] == "development" 
    gem 'awesome', :path => "~/code/awesome" 
else 
    gem 'awesome', :path => "vendor/gems/awesome-0.0.1" 
end 

शायद यह काम करेगा। यदि आपको अपने प्रगतिशील मणि को विक्रेता की आवश्यकता है तो आप एक छोटी सी छोटी स्क्रिप्ट बना सकते हैं जो एनएनवी सेट करेगी, इसे विक्रेता करे, और एनएनवी रीसेट करें। एह?

bundle config local.rack ~/path/to/local/rack 

यह केवल काम करता है अगर मणि एक Git रेपो और शाखा Gemfile में निर्दिष्ट है:

+0

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

+0

हाँ मैं एक ही चीज़ को पूरा करना चाहता हूं लेकिन ऐसा लगता है कि ऐसा करने का कोई साफ तरीका नहीं है। –

13

एक नई सुविधा है कि ऐसा करने के लिए, बस local.gem_name config विकल्प specyfing, की तरह से की अनुमति देता है नहीं है।

अधिक जानकारी के लिए thr Bundler डॉक्स देखें: http://bundler.io/v1.3/bundle_config.html

-3

यहाँ एक सुझाव जो मैं पूरी तरह से काम करने के लिए नहीं मिला है (एक होड़ विषय के लिए इस्तेमाल किया और मैं विषय से कुछ स्टाइलशीट के साथ समस्याओं मिल गया):

group :production do 
     gem 'gemname', '~> 0.1.6', :git => 'git://github.com/foouser/gemname.git' 
end 

group :development do 
     gem 'gemnamedev', :path => '~/path/gemname' # use local version 
end 

अपनी gemname.gemspec फ़ाइल डुप्लिकेट करें और इसे gemnamedev.gemspec पर कॉल करें, और इसके अंदर s.name को "gemnamedev" में बदलें।

+0

यह काम नहीं करेगा। बंडलर आपको एक त्रुटि देता है जिसमें कहा गया है कि आपके पास विभिन्न स्रोतों से दो रत्न नहीं हो सकते हैं – jakecraige

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

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