हमने एक डेवलपर के साथ शुरुआत की, और एक svn रेपो जिसमें हमारे सभी कोड हैं:
^/foo/trunk/module-a
^/foo/trunk/module-b
^/foo/trunk/module-b/submodule-b1
^/foo/trunk/website1
(उस समय यह एक बड़ा सुधार था)। इसके बाद थोड़ा बढ़ने का मौका मिला, हमें परिपत्र निर्भरता, धीमी गति से परीक्षण, और सामान्य कठिनाइयों के साथ समस्या फिर से शुरू हो गई कोड का उपयोग करना (जैसे कि वेबसाइट 1 की सुविधा सेट अन्यथा सामान्य मॉड्यूल-में crept था)।
कोड आधार को संशोधित करना चाहते हैं, और हमसे अपेक्षा करते हैं कि हम शीघ्र ही git में चले जाएँगे (और कहीं पढ़ा होगा कि git svn Mega-repos को पसंद नहीं करता है), हमने बहुत अधिक दानेदार संरचना में परिवर्तन किया है:
^/module-a/trunk/
^/module-b/trunk/
^/module-b/trunk/sumbmodule-b1
^/earlier-sub-sub-sub-module-c/trunk
etc. (about 120 such modules)
यह वैचारिक रूप से बहुत अच्छा था। अधिक मॉड्यूलर कोड, बहुत तेजी से परीक्षण-सूट, दस्तावेज़ के लिए आसान, आदि। हमने अपने कुछ अधिक सामान्य घटकों को खोल दिया, और सभी मॉड्यूल pip install -e .
को स्थापित करने योग्य बनाया ( development
वर्चुअन में उन्हें स्थापित करने के लिए )।
हमने एक ^/srv/trunk
रिपॉजिटरी बनाई जिसमें रनटाइम एनवायरनमेंट के फोल्डर स्ट्रक्चर, यानी। ^/srv/trunk/lib
मॉड्यूल के /srv/trunk/src
लिए ^/foo/trunk
, ^/srv/trunk/www
वेबसाइटों आदि के अवशेषों के लिए।
और अंत में (पेरफोर्स से एक विचार लेना, जिसे मैंने बहुत समय पहले काम किया था [ https://www.perforce.com/perforce/r12.1/manuals/cmdref/client.html] ) हमने एक "vcs- बनाया "टेक्स्ट फ़ाइल" प्राप्त करें जो सभी संबंधित रिपॉजिट्स को सूचीबद्ध करती है और जहां उन्हें देव वातावरण में जांचा जाना चाहिए, और ऐसा करने के लिए संबंधित कमांड। उदाहरण के लिए vcs-fetc लाइन:
svn srv/lib/module-a ^/module-a/trunk
या तो कारण होगा (पहली बार)
cd /srv/lib && svn co ^/module-a/trunk module-a
या (बाद में)
cd /srv/lib/module-a && svn up
और इसी तरह जीथब रिपोज (हमारे अपने और परिवर्तित / अनलॉग्ड वेंडर पैकेज) दोनों के लिए।
हमने उत्पादन वातावरण बनाने के लिए उसी vcs-fetch प्रक्रिया का उपयोग किया है, लेकिन हम जल्दी से पता लगा रहे हैं कि हमारे पास यह जानने का कोई तरीका नहीं है कि vcs-fetch करने के बाद किस संस्करण का उपयोग उत्पादों में किया जाता है।
मेगा-रेपो के साथ, हम ट्रंक से ठेस को अद्यतन करने से पहले केवल संशोधन संख्या को नोट कर सकते थे, और वापस जाना एक सरल svn -r nnn up .
दूर था। Svn और git (और hg में एक मॉड्यूल) - और ~ 120 रेपो दोनों में कोड के साथ, यह स्पष्ट नहीं है कि यह कैसे करना है?
मैंने http://12factor.net/ को आज पढ़ा , और पहला कारक "वन कोडबेस" है, इसलिए मैं सोच रहा हूँ कि क्या मैं यहाँ सही रास्ते से हट रहा हूँ?
एक विचार मुझे एक तैनाती स्क्रिप्ट बनाने का था जो पाइप-इंस्टाल करने योग्य "परिनियोजन" -व्हील और "बंडल" को एक requirements.txt
फाइल में एक साथ बनाएगा । एक परिनियोजन में फिर एक नया वर्चुअनव्यू बनाना, आवश्यकताओं को स्थापित करना होगा। परिनियोजन पहियों को सूचीबद्ध करने वाली फ़ाइल को सक्रिय करना, और सक्रिय वर्चुअन को बदलना। पिछले करने के लिए वापस लौटने में बस virtualenv स्विचन को शामिल करना होगा (लेकिन जब तक हम virtualenvs को हमेशा के लिए चारों ओर नहीं रखना चाहते थे, यह हमें किसी भी समय वापस जाने की अनुमति नहीं देगा - मेरे अनुभव में जो कि हालांकि कभी आवश्यक नहीं रहा है)।
इस बिंदु पर मैं सोच रहा हूँ कि क्या मैं गलत दिशा में चल रहा हूँ, या अगर मैं अभी सही रास्ते पर नहीं चल पाया हूँ ..? (मैं जो कुछ भी पढ़ रहा हूं वह "आपके ऐप" के बारे में बात कर रहा है, और मुझे नहीं पता कि यह 14 वेबसाइटों को एक ही कोड आधार से चलाने का अनुवाद कैसे करता है ...)