10

लंबे समय से, हमने परियोजना के भंडार के भीतर अपना डेटा रखा है। हमने बस डेटा/एसक्यूएल के तहत सबकुछ रखा है, और प्रत्येक तालिका में अपनी खुद की create_tablename.sql और data_tablename.sql फ़ाइलें थीं।कोड और डेटा ट्रैकिंग/तैनाती

हमने अब हमारे दूसरे प्रोजेक्ट को स्केलर पर तैनात किया है और हमने महसूस किया है कि यह थोड़ा गन्दा है।

जिस तरह से हम नियोजित करें:

हम स्क्रिप्ट जो 3 अभिलेखागार (डेटा, कोड, स्थैतिक फ़ाइलें) जो हम तो S3 पर 3 अलग बाल्टी में स्टोर में परियोजना के अलावा आंसू की एक "packageup" संग्रह है।

जब भी कोई भूमिका शुरू होती है, तो यह फ़ाइलों में से एक (भूमिका, डेटा, एनएफएस या वेब के आधार पर) डाउनलोड करता है और फिर एक "अनपॅक" स्क्रिप्ट प्रत्येक भूमिका के लिए सब कुछ सेट करता है, डेटा को mysql में लोड करता है, सेट अप करता है एनएफएस, आदि

हम ऐसा इसलिए करते हैं क्योंकि हम सर्वर छवियों को सहेजना नहीं चाहते हैं, हम हमेशा वेनिला इंस्टेंस से शुरू करते हैं जिस पर हम विभिन्न घरों में निर्मित स्क्रिप्ट का उपयोग करके स्क्रैच से सब कुछ इंस्टॉल करते हैं। स्टार्टअप समय कोई मुद्दा नहीं है (हमारे पास 9 मिनट में खेत का उपयोग करने के लिए तैयार है)।

समस्या यह है कि जब भी हम एक नया विकास निर्माण स्थापित करने का प्रयास करते हैं तो डेटाबेस के सही संस्करण को खोजने का प्रयास करना दर्द होता है (किसी भी समय, हमारे पास लगभग 4 देव एक परियोजना के लिए बनाता है)। इसके अलावा, उत्पादन में जाने के बाद गिट शुरू हो रहा है, क्योंकि एसक्यूएल फाइलें लगभग 500 एमबी तक खत्म होती हैं।

सवाल यह है:

कैसे बाकी सब प्रबंध कर रहा है डेटाबेस? मैं ऐसा कुछ ढूंढ रहा हूं जो देव में उत्पादन से डेटा लेना आसान बनाता है, और देव से उत्पादन में डेटा माइग्रेट करना आसान बनाता है, लेकिन किसी भी चीज़ पर ठोकर नहीं लगाता है।

+0

तुम क्यों ठेस देव से डेटा स्थानांतरित करना चाहते हैं? –

+1

@sheepsimulator - डेटाबेस में स्टोर कॉन्फ़िगरेशन डेटा जैसे कई ढांचे (जैसे Magento, ATG, आदि) को dev/staging वातावरण को दोहराने के लिए पोर्ट किया जाना आवश्यक है –

उत्तर

4

आपको गंभीरता से dbdeploy (dbdeploy.com) पर एक नज़र डालना चाहिए। यह कई भाषाओं में पोर्ट किया गया है, प्रमुख जावा और PHP हैं।यह एंटी और फ़िंग जैसे बिल्ड-टूल्स में एकीकृत है, और तथाकथित डेल्टा फ़ाइलों के आसान साझाकरण की अनुमति देता है।

एक डेल्टा फ़ाइल में हमेशा एक तैनाती अनुभाग होता है, लेकिन इसमें एक पूर्ववत अनुभाग भी हो सकता है। जब आप अपनी डेल्टा फ़ाइल करते हैं और कोई अन्य डेवलपर इसे जांचता है, तो वह सिर्फ डीबीडीओपी चला सकता है और सभी नए बदलाव स्वचालित रूप से अपने डेटाबेस पर लागू होते हैं।

मैं अपने ओपन सोर्स ब्लॉग के लिए dbdeploy उपयोग कर रहा हूँ, ताकि आप एक कैसे डेल्टा फ़ाइलें आयोजन किया जाता है पर नज़र रखना कर सकते हैं: http://site.svn.dasprids.de/trunk/sql/deltas/

+0

यहां "पूर्ववत करें" में एक महत्वपूर्ण बिंदु है। किसी भी सभ्य डीबी तैनाती प्रक्रिया में एक-चरण रोल-बैक फ़ंक्शन होना चाहिए अन्यथा आप * एक दिन पकड़े जाएंगे ... –

+0

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

+0

ठीक है, एक डेल्टा फ़ाइल के रूप में आमतौर पर एक संस्करण के बजाय एक विशिष्ट सुविधा होती है, तो आप उस नियंत्रण फ़ाइल से उस डेल्टा फ़ाइल को हटा सकते हैं और आपको ठीक होना चाहिए (निश्चित रूप से पूर्ववत भाग को लागू करने के बाद, पहले नहीं)। – DASPRiD

0

capistrano देखें। यह एक उपकरण है जो रूबी समुदाय विभिन्न परिवेशों पर तैनाती के लिए उपयोग करता है और मुझे यह वास्तव में उपयोगी लगता है।

यदि आपकी तैनाती चकित हो रही है तो Murder नामक टूल टूल को आजमाएं।

+0

मैं तैनाती चरण के बारे में चिंतित नहीं हूं, क्योंकि मैं हूं उत्पादन/विकास वातावरण के साथ संयुक्त तैनाती के बारे में। हमें अक्सर हमारे बीच के साथ-साथ लाइव वातावरण के साथ डेटाबेस (संरचना + डेटा) साझा करना पड़ता है। इसके अलावा, गिट हमारी एसक्यूएल फाइलों पर चकित कर रहा है। –

2

मैं कैसे समझता हूं कि आपका मुख्य प्रश्न डीवी से उत्पादन में एसक्यूएल डेटा माइग्रेट करने में अन्य लोगों की विलुप्तता है।

मैं अपने एसक्यूएल के बजाय माइक्रोसॉफ्ट एसक्यूएल सर्वर का उपयोग करता हूं, इसलिए मुझे यकीन नहीं है कि मेरी समाप्ति आप सीधे उपयोग कर सकते हैं। फिर भी इस तरह से बहुत अच्छा काम करता है।

मैं दो डेटाबेस में डेटा की तुलना करने के लिए विजुअल स्टूडियो 2010 अल्टीमेट संस्करण का उपयोग करता हूं। विंसुअल स्टूडियो टीम संस्करण 2008 (या डेटाबेस संस्करण) में भी वही सुविधा मौजूद है। यह समझने के लिए आप http://msdn.microsoft.com/en-us/library/dd193261.aspx पढ़ सकते हैं कि यह कैसे काम करता है। आप दो डेटाबेस (देव और प्रोड) की तुलना कर सकते हैं और डेटा को संशोधित करने के लिए SQL स्क्रिप्ट उत्पन्न कर सकते हैं। आप तुलना करने से कुछ टेबल या कुछ कॉलम को आसानी से बाहर कर सकते हैं। आप परिणामों की जांच भी कर सकते हैं और लिपि की पीढ़ी से कुछ प्रविष्टियों को बाहर कर सकते हैं। तो कोई भी आसान और लचीला उत्पन्न स्क्रिप्ट कर सकता है जिसे डेटाबेस में परिवर्तनों की तैनाती के लिए उपयोग किया जा सकता है। आप संरचना से दो डेटाबेस के डेटा की तुलना कर सकते हैं (स्कीमा तुलना)। तो आप प्रोड से डेटा के साथ डेटा में रीफ्रेश कर सकते हैं या स्क्रिप्ट उत्पन्न कर सकते हैं जो dev डेटाबेस के अंतिम संस्करण में प्रोड डेटाबेस को संशोधित करता है। मैं आपको इस विशेषताओं और http://www.red-gate.com/ के कुछ उत्पादों को देखने की सलाह देता हूं (जैसे http://www.red-gate.com/products/SQL_Compare/index.htm)।

0

निजी तौर पर मैं टॉड

पर

http://www.toadworld.com/

कम लग रही होगी 10k से;) ... डेटाबेस संरचनाओं का विश्लेषण करेगा, उन्हें संशोधित करने के लिए स्क्रिप्ट का उत्पादन करेगा और डेटा माइग्रेट करेगा।

0

समाधान का एक हिस्सा आपके प्रत्येक कोड मॉड्यूल और उनके संबंधित डेटा संसाधनों के संस्करण को एक ही स्थान पर कैप्चर करना है, और स्थिरता सुनिश्चित करने के लिए उनकी तुलना करना है। उदाहरण के लिए, आपके संस्करण संख्या में वृद्धि, customer_comments मॉड्यूल को संबंधित डीबी टेबल को डेटा के बराबर संस्करण संख्या में अपग्रेड करने के लिए संबंधित SQL डेल्टा फ़ाइल की आवश्यकता होगी।

उदाहरण के लिए, Magento के core_resourceapproach पर @AlanStorm द्वारा दस्तावेज़ के रूप में देखें।

चीयर्स, जद

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