अलग-अलग चीज़ों को आज़माने और हर बार काटे जाने के एक लंबे और कठिन महीने के बाद मैंने महसूस किया,
सिर्फ इसलिए कि हरोकू एक तैनाती तंत्र के रूप में एक गिट रिपॉजिटरी का उपयोग करता है, आपको इसे गिट रिपॉजिटरी के रूप में नहीं मानना चाहिए
यह rsync बस के रूप में अच्छी तरह से हो सकता था, वे गिट के लिए चले गए, इस वजह से विचलित न हों
यदि आप ऐसा करते हैं, तो आप अपने आप को सभी प्रकार की चोटों के लिए खोल देते हैं। उपरोक्त सभी समाधान कहीं न कहीं बुरी तरह विफल हैं:
- इसे हर बार, या समय-समय पर, या अनपेक्षित चीजें होने के लिए कुछ करना पड़ता है (सबमोडुल्स को धक्का देना, उपशीर्षक को सिंक्रनाइज़ करना, ...)
- यदि आप अपने कोड को संशोधित करने के लिए उदाहरण के लिए एक इंजन का उपयोग करते हैं, तो बुंदेलर आपको जीवित खाएगा, इस खोज के लिए एक अच्छा समाधान खोजने के लिए खोज के दौरान उस परियोजना के साथ मुझे जो निराशा हुई है, उसका वर्णन करना असंभव है
- आप इंजन को git रेपो लिंक + के रूप में जोड़ने का प्रयास करते हैं +
bundle deploy
- विफल, आपको हर बार अपडेट को बंडल करने की आवश्यकता होती है
- आप इंजन को
:path
+ bundle deploy
- असफल के रूप में जोड़ने की कोशिश करते हैं, देव टीम मानती है:path
विकल्प है "आप इस मणि विकल्प के साथ बुंडलर का उपयोग नहीं कर रहे हैं" इसलिए यह उत्पादन के लिए बंडल नहीं करेगा।
- इसके अलावा, इंजन का हर रिफ्रेश आपके रेल स्टैक को अपडेट करना चाहता है -_-
- केवल समाधान मैंने पाया है कि इंजन का उपयोग
/vendor
विकास में एक सिम्लिंक के रूप में किया जाता है , और वास्तव में उत्पादन के लिए फाइलों को कॉपी किया जाता है
समाधान
प्रश्न में एप्लिकेशन में git रूट की 4 परियोजनाएं हैं:
- एपीआई - प्रोफाइल के आधार पर 2 अलग-अलग हरोकू होस्ट्स पर चलेंगे - अपलोड करें और एपीआई करें
- वेब - वेबसाइट
- वेब-पुरानी - पुरानी वेबसाइट, अभी भी माइग्रेशन में
- सामान्य - एक इंजन में निकाले गए सामान्य घटक
इंजन vendor/common
की जड़ को देखकर सभी परियोजनाओं में एक सहानुभूति होती है common
। हरकोको की तैनाती के लिए सोर्स कोड का संकलन करते समय हमें प्रत्येक अलग होस्ट के वेंडर फोल्डर में शारीरिक रूप से कोड होने वाले सिमलिंक और rsync को हटाना होगा।
- होस्टनाम की एक सूची को तर्क के रूप में स्वीकार करता है
- आपके विकास रेपो में एक गिट पुश को चलाता है और फिर एक अलग फ़ोल्डर में एक साफ गिट्टी को चलाता है, जिससे यह सुनिश्चित हो जाता है कि कोई गंदा (असम्बद्ध) परिवर्तन स्वचालित रूप से मेजबानों को धकेल दिया जाता है
- मेजबानों को समानांतर में तैनात करता है - हर हरोकू गैट रेपो को खींचा जाता है, नए कोड को सही स्थानों पर rsynced किया जाता है, जो कमिट कमेंट में बुनियादी धक्का सूचना के साथ शुरू होता है,
- अंत में, हम कर्ल के साथ एक पिंग भेजते हैं ताकि हॉबी मेजबानों को जगाया जा सके और लॉग्स को पूँछने के लिए यह देखने के लिए कि क्या सब शराब गए हैं
- जेनकिंस के साथ भी अच्छा खेलता है: डी (सफल परीक्षण के बाद सर्वर का परीक्षण करने के लिए स्वचालित कोड पुश)
6 महीने में अब न्यूनतम (नहीं?) समस्याओं के साथ जंगली में बहुत अच्छा काम करता है
यहां स्क्रिप्ट https://gist.github.com/bbozo/fafa2bbffcc7b12d923f
अपडेट १
@AdamBuczynski, यह इतना सीधा कभी नहीं है।
1 आपके पास हमेशा कम से कम उत्पादन और परीक्षण का वातावरण होगा - और खराब होने पर फ़ंक्शन विशिष्ट क्लस्टर का एक गुच्छा - अचानक 1 फ़ोल्डर को एक बहुत ही मूल आवश्यकता के रूप में एन हरको प्रोजेक्ट्स के लिए मैप करने की आवश्यकता होती है और इसे सभी को किसी भी तरह से व्यवस्थित करने की आवश्यकता होती है ताकि स्क्रिप्ट "जानता है" कि आप किस स्रोत को तैनात करना चाहते हैं,
2 आप परियोजनाओं के बीच कोड साझा करना चाहते हैं - अब sync_common
हिस्सा आता है , विकास में सहानुभूति के साथ shennanigans Heroku पर वास्तविक rsynced कोड द्वारा प्रतिस्थापित किया जा रहा है क्योंकि Heroku को एक निश्चित फ़ोल्डर संरचना और बंडल और रूबी की आवश्यकता होती है यदि आप वास्तव में चीजों को बदसूरत बनाते हैं एक मणि में आम धागे निकालना चाहते हैं
3 आप सीआई में प्लग करना चाहेंगे और यह थोड़ा बदल जाएगा कि उप-प्रलेखक और गिट रेपो को व्यवस्थित करने की आवश्यकता है, अंत में उपरोक्त सरलतम संभव उपयोग के मामले में आप उपर्युक्त जीस्ट के साथ समाप्त होते हैं।
अन्य परियोजनाओं में मुझे जावा बिल्ड में प्लग करने की आवश्यकता होती है, जब कई क्लाइंट को सॉफ़्टवेयर बेचते हैं तो आपको उन मॉड्यूल को फ़िल्टर करना होगा जो इंस्टॉलेशन आवश्यकताओं और व्हाट्सएप के आधार पर स्थापित होते हैं।
मैं वास्तव में एक Rakefile या कुछ में बंडल चीजों की खोज पर विचार करना चाहिए और इस तरह से सब कुछ करना चाहिए ...