2011-01-31 8 views
11

मैं एक रेल ऐप होस्ट करने के लिए हेरोकू का उपयोग कर रहा हूं, जिसका अर्थ है कि गिट को हेरोोकू पर तैनात करने के लिए उपयोग करना। हेरोकू पर "शुद्ध गिट वर्कफ़्लो" के कारण, सर्वर पर अपस्ट्रीम जाने की आवश्यकता वाले किसी भी चीज़ को मेरे स्थानीय बॉक्स पर समान रूप से कॉन्फ़िगर किया जाना चाहिए।जीआईटी परिनियोजन + कॉन्फ़िगरेशन फ़ाइलें + हेरोकू

हालांकि मुझे स्थानीय सेटअप में या हेरोकू पर तैनात किए जाने के आधार पर कुछ कॉन्फ़िगरेशन फ़ाइलें अलग-अलग होने की आवश्यकता है। दोबारा, तैनाती विधि के कारण हेरोोकू का उपयोग करता है, मैं .gitignore और टेम्पलेट का उपयोग नहीं कर सकता (जैसा कि मैंने कई बार सुझाव दिया है, और अन्य परियोजनाओं में उपयोग किया है)।

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

क्या यह किया जा सकता है? मैं किसी भी सुझाव की सराहना करता हूं!

+0

गिट शाखाएं बनाना विकल्प नहीं है? – freedrull

उत्तर

16

आप प्रत्येक हेरोकू ऐप के स्थानीय सेटअप पर लगातार कॉन्फ़िगर कर सकते हैं ताकि उन्हें आपके कोड में बिल्कुल भी न हो! तो एक ही कोड एकाधिक heroku साइटों पर चला सकता है लेकिन विभिन्न विन्यास के साथ। यह बहुत ही सरल, आसान, सुरुचिपूर्ण ...

यह वह दृष्टिकोण है जिसका हमने उपयोग किया था। (हमने इसे उसी चीज़ के लिए इस्तेमाल किया ... हमारे पास हेरोकू में एक ही ऐप के कई क्लोन हैं, लेकिन हम अपने देव स्थानीय निर्देशिका में गीथब में केवल एक स्रोत चाहते हैं, हम पुश टू ओरिजिन (गीथूब) करते हैं, तब हमारे पास जिस तरह से हम इसे पसंद करते हैं, हम प्रोड स्थानीय निर्देशिका में सीडी करते हैं, जो समान जिथब भंडार में जाता है, और हम केवल इस निर्देशिका में GITHUB से PULL, कभी भी धक्का नहीं देते (उदाहरण के लिए, सभी हमारे देव निर्देशिका से github आते हैं, prod निर्देशिका अन्य Heroku अनुप्रयोग के लिए सिर्फ एक मचान क्षेत्र (नीचे के रूप में समझाया गया है), सटीक एक ही कोड दोनों Heroku साइटों पर काम करता है है।)

द्वारा विभिन्न Heroku साइटों अलग कॉन्फ़िगरेशन रही है।

इसलिए हमारे कार्यप्रवाह है:

cd myDEVdir 
*....develop away....* 
git add . 
git commit -am "another day, another push" 
git push origin *(to our SINGLE github repo)* 
git push heroku *(test it out on heroku #1)* 

cd ../myPRODdir 
git pull   *(grabs SAME code as used on other site *) 
git push heroku *(now the SAME code runs on Heroku #2)* 

यह है कि (महत्वपूर्ण यह है कि दोनों निर्देशिका वही GitHub रेपो को इंगित है)!

http://docs.heroku.com/config-vars

अपने स्थानीय कमांड लाइन पर

, अपने दो स्थानीय निर्देशिका से प्रत्येक के लिए, कार्य करें::

अब यहाँ कैसे आप अपने साइट विशिष्ट config Heroku साइट पर वार्स रख

$ heroku config:add FIRST_CONFIGVAR=fooheroku1 
Adding config vars: 
    FIRST_CONFIGVAR => fooheroku1 

$ heroku config:add SECOND_CONFIGVAR=barheroku1 
Adding config vars: 
    SECOND_CONFIGVAR => barheroku1 

लोगों को देखने के लिए आप को परिभाषित किया है:

$ heroku config 
FIRST_CONFIGVAR => fooheroku1 
SECOND_CONFIGVAR => barheroku1 

फिर अपनी अन्य निर्देशिका myPRODdir के लिए सीडी करें और वही काम करें, केवल उसी रिमोट हेरोकू वर्र्स को fooheroku2 और barheroku2 पर सेट करें।

अपने पटरियों में तो

एप्लिकेशन आपको सरल इसलिए की तरह उन्हें:

a = ENV['FIRST_CONFIGVAR'] 

एक ऐप 'fooheroku1' पढ़ा जाएगा अन्य एप्लिकेशन को आपके स्थानीय निर्देशिका पर 'fooheroku2'

और अंत में, पढ़ा जाएगा myDEVdir, जहां देव मोड में चलाने के लिए, अपने अपने 'देव' config वार्स के संस्करण config/environment/development.rb फाइल में एक ही config आदेशों डाल वे जो भी किया जाना चाहिए करने के लिए सेट कर दिया जाएगा:

ENV['FIRST_CONFIGVAR'] = "foodev" 
ENV['SECOND_CONFIGVAR'] = "bardev" 

आसान, सुरुचिपूर्ण। धन्यवाद, हेरोोकू!

+0

वाह, यह वास्तव में * अच्छा दृष्टिकोण है। बहुत बहुत धन्यवाद, यह एक बड़ी मदद है !! – Andrew

+0

अगर इससे मदद मिली तो इसके लिए वोट दें! – jpwynn

+0

यह शानदार है, धन्यवाद! –

5

यहाँ कुछ समाधान हैं:

1) आप केवल Heroku पर फ़ाइलों को अनदेखा करना चाहते हैं, तो स्विच डालने का उपयोग slugignore

2) अपने परिवर्तनों को नाबालिग हैं, सूखी रह सकते हैं और सार्वभौमिक config फ़ाइलों का उपयोग, सर्वर विशेष व्यवहार

if Rails.env == "production" 
    #production server code 
elsif Rails.env == "development" 
    #development server code 
else 
    #test server code 
end 

3) के लिए अपने परिवर्तनों को प्रमुख रखते हैं, विन्यास के लिए प्रत्येक अतिरिक्त सर्वर के लिए/initializers एक कॉन्फ़िग फ़ाइल और add a "smudge file" लिखें। असल में, आपके पास तकनीक का उपयोग करके अलग फाइलें होंगी (2)।

4) यदि आपके परिवर्तन स्वैपिंग (संभावना नहीं) हैं, तो प्रत्येक सर्वर के लिए अलग शाखाएं बनाए रखें।

5) This script वही कर सकता है जो आपने अनुरोध किया था, लेकिन अधिक हो सकता है।

मुझे आशा है कि इससे मदद मिलेगी।

+0

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

+0

मुझे लगता है कि "धुंध" इसे काम कर सकता है, मैं इसे देख लूंगा और यदि यह काम करता है तो मैं यह जवाब स्वीकार करूंगा :) – Andrew

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