2012-01-26 14 views
5

पृष्ठभूमि जानकारी:गिट पर्यावरण सेटअप। सलाह की जरूरत

  • हम वर्तमान में 3 वेब प्रोग्रामर (अच्छा, वास्तविक जीवन मित्र, कोई अविश्वास मुद्दों) कर रहे हैं।
  • प्रत्येक प्रोग्रामर एसएसएच एकल लिनक्स सर्वर में, जहां कोड रहता है, सूडो शक्तियों के साथ अपने उपयोगकर्ता नाम के तहत।
  • हम सभी एक ही समय में विभिन्न फ़ाइलों पर काम का उपयोग करते हैं। हम सवाल पूछते हैं "क्या आप फाइल में हैं __?" कभी कभी। हम विम का उपयोग करते हैं ताकि हम जान सकें कि फ़ाइल खोली गई है या नहीं।
  • हमारे विकास कोड (अभी तक कोई उत्पादन नहीं)/var/www/
  • हमारे रिमोट रेपो बिटबकेट पर होस्ट किया गया है।
  • मैं * गिट के लिए बहुत * नया हूं। मैंने पहले विचलन का उपयोग किया लेकिन मैं मूल रूप से चम्मच-फेड निर्देश था और उसे बताया गया कि कोड को सिंक करने और प्रतिबद्ध करने के लिए क्या टाइप करना है।
  • मैंने स्कॉट चेकॉन के प्रो गिट के आधे हिस्से को पढ़ा और यह मेरे गिट ज्ञान के अधिकांश हद तक है।
  • यदि यह महत्वपूर्ण है, तो हम उबंटू 11.04, अपाचे 2.2.17, और गिट 1.7.4.1 चलाते हैं।

तो जन हूडेक ने मुझे पिछले प्रश्न में कुछ सलाह दी। उन्होंने मुझे बताया कि निम्नलिखित करने के लिए एक अच्छा अभ्यास:

  • प्रत्येक डेवलपर के पास अपने स्थानीय कंप्यूटर पर अपना खुद का रेपो है।
  • /var/www/सर्वर पर रेपो होने दें। अनुमति 770.

यही मतलब होगा अपने स्वयं के दीप ढेर है कि प्रत्येक डेवलपर कंप्यूटर की जरूरत के लिए (या कम से कम अपाचे, पीएचपी, MySQL, और अजगर स्थापित) को .git फ़ोल्डर सेट करें।

कोड अधिकतर जावास्क्रिप्ट और PHP फ़ाइलें हैं, इसलिए इसे क्लोन करने के लिए यह एक बड़ा सौदा नहीं है। हालांकि हम स्थानीय रूप से डेटाबेस का प्रबंधन कैसे करते हैं?

इस मामले में, हमारे पास केवल दो टेबल हैं और स्थानीय स्तर पर संपूर्ण डेटाबेस को पुन: बनाना आसान होगा (कम से कम परीक्षण के लिए)। लेकिन भविष्य में जब डेटाबेस बहुत बड़ा हो जाता है, तो क्या हमें सर्वर पर MySQL डेटाबेस पर दूरस्थ रूप से लॉग ऑन करना चाहिए या क्या हमारे पास विकास और परीक्षण उद्देश्यों के लिए "नमूना" डेटा होना चाहिए?

+0

आप उत्पादन से देव डेटाबेस के लिए एक तरह से प्रतिकृति होने पर विचार किया है? दो प्रतियां, जिनमें से एक नियमित आधार पर दूसरे को ओवरराइट करता है? फिर आप देव प्रतिलिपि से जुड़ते हैं, और आपके द्वारा किए गए कुछ भी लंबे समय तक "छड़ी" नहीं करेंगे। – Borealid

+0

बस स्पष्ट करने के लिए, ऐसा लगता है कि यह गिट के साथ नहीं है, लेकिन "विकास परीक्षण पर काम करता है" से आपकी विकास शैली को बदलने के साथ "हर किसी का अपना परीक्षण वातावरण होता है"। आपका विशेष प्रश्न परीक्षण डेटाबेस के साथ क्या करना है इसके बारे में है। क्या मैं सही हूँ? – Schwern

+0

@ बॉरिडाइड मुझे आश्चर्य है कि एक तरफा * आंशिक * प्रतिकृति करना संभव है, जैसे सीमा 50 या कुछ के साथ एक चुनिंदा कथन करना। इस तरह हम स्थानीय डेटाबेस को काफी छोटा रख सकते हैं और अपना खुद का कस्टम यादृच्छिक डेटा भी जोड़ सकते हैं। – hobbes3

उत्तर

4

आप जो कर रहे हैं वह "हर किसी के साथ एक पर्यावरण में मिलकर काम करता है" से "हर किसी का अपना विकास वातावरण" होता है। मुख्य लाभ यह है कि हर कोई एक दूसरे के पैर पर कदम नहीं उठाएगा।

अन्य लाभों में एक विषम विकास वातावरण शामिल है, यह है कि यदि हर कोई एक ही मशीन पर विकसित हो रहा है तो सॉफ्टवेयर उस सेटअप पर निर्भर हो जाएगा क्योंकि डेवलपर्स आलसी हैं। यदि हर कोई अलग-अलग वातावरण में विकसित होता है, यहां तक ​​कि एक ही सामान के थोड़ा अलग संस्करणों के साथ, उन्हें इससे निपटने के लिए और अधिक मजबूत कोड लिखने के लिए मजबूर किया जाएगा।

जैसा कि आपने देखा है, मुख्य दोष, पर्यावरण स्थापित करना कठिन है। विशेष रूप से, यह सुनिश्चित करना कि डेटाबेस काम करता है।

सबसे पहले, प्रत्येक डेवलपर का अपना डेटाबेस होना चाहिए। इसका मतलब यह नहीं है कि उनके पास सभी का अपना डेटाबेस सर्वर है (हालांकि यह विषम उद्देश्यों के लिए अच्छा है) लेकिन उनके पास अपना स्वयं का डेटाबेस उदाहरण होना चाहिए जो वे नियंत्रित करते हैं।

दूसरा, आपको में एक स्कीमा होना चाहिए और न कि डेटाबेस में जो भी हो। यह एक संस्करण नियंत्रित फ़ाइल में होना चाहिए।

तीसरा, एक नया डेटाबेस स्थापित करना स्वचालित होना चाहिए। यह डेवलपर्स को बिना किसी परेशानी के एक साफ डेटाबेस स्थापित करने देता है।

चौथा, आपको उस डेटाबेस में दिलचस्प परीक्षण डेटा प्राप्त करने की आवश्यकता होगी। यहां वह जगह है जहां चीजें दिलचस्प होती हैं ...

आपके पास ऐसा करने के लिए कई मार्ग हैं।

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

दूसरा "परीक्षण जुड़नार" लिखना है। असल में प्रत्येक परीक्षण डाटाबेस को परीक्षण डेटा के साथ पॉप्युलेट करता है। इसका विकास करने वाले को सटीक डेटा प्राप्त करने की इजाजत देने का लाभ है, और पता है कि डेटाबेस में राज्य ठीक है। दोष यह है कि यह बहुत समय ले सकता है, और अक्सर डेटा बहुत साफ है। डेटा में सभी किरकिरा वास्तविक डेटा नहीं होंगे जो वास्तविक बग का कारण बन सकते हैं।

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

अंत में, आप पुस्तकालयों का एक सेट बना सकते हैं जो आपके लिए अर्ध-यादृच्छिक डेटा उत्पन्न करते हैं। मैं वीडियो गेम के बाद यह "सिम्स तकनीक" कहता हूं जहां आप नकली परिवार बनाते हैं, उन्हें यातना देते हैं और फिर उन्हें फेंक देते हैं। उदाहरण के लिए, मान लीजिए कि आपके पास उपयोगकर्ता ऑब्जेक्ट है जिसके लिए नाम, आयु, भुगतान ऑब्जेक्ट और सत्र ऑब्जेक्ट की आवश्यकता है। किसी उपयोगकर्ता का परीक्षण करने के लिए आप अलग-अलग नाम, आयु, भुगतान करने की क्षमता और लॉगिन स्थिति वाले उपयोगकर्ताओं को चाह सकते हैं। नाम, आयु, भुगतान और सत्र के लिए परीक्षण डेटा जेनरेट करने के लिए आपको आवश्यक सभी को नियंत्रित करने के लिए। तो आप उम्र उत्पन्न करने के लिए नाम उत्पन्न करने के लिए एक फ़ंक्शन लिखते हैं। यह एक सूची से यादृच्छिक रूप से चुनने के रूप में सरल हो सकता है। फिर आप एक भुगतान ऑब्जेक्ट और एक सत्र वस्तु बनाने के लिए एक लिखते हैं। डिफ़ॉल्ट रूप से, सभी गुण यादृच्छिक होंगे, लेकिन मान्य ... जब तक आप अन्यथा निर्दिष्ट नहीं करते हैं। उदाहरण के लिए...

# Generate a random login session, but guarantee that it's logged in. 
session = Session.sim(logged_in = true) 

फिर आप इसका उपयोग एक दिलचस्प उपयोगकर्ता को एक साथ रखने के लिए कर सकते हैं।

# A user who is logged in but has an invalid Visa card 
# Their name and age will be random but valid 
user = User.sim(
    session = Session.sim(logged_in = true), 
    payment = Payment.sim(invalid = true, type = "Visa"), 
); 

यह परीक्षण जुड़नार के सभी फायदे हैं, लेकिन जब से डेटा के कुछ अप्रत्याशित है यह वास्तविक डेटा के कुछ लाभ है। अपने डिफ़ॉल्ट सिम और रैंड फ़ंक्शंस में "रोचक" डेटा जोड़ना व्यापक प्रतिक्रियाओं में होगा। उदाहरण के लिए, random_name पर यूनिकोड नाम जोड़ना संभवतः सभी प्रकार की रोचक बग की खोज करेगा! दुर्भाग्यवश यह महंगा है और निर्माण करने में समय लगता है।

वहां आपके पास है। दुर्भाग्यवश डेटाबेस समस्या का कोई आसान जवाब नहीं है, लेकिन मैं आपको केवल उत्पादन डेटाबेस की प्रतिलिपि बनाने के लिए आग्रह करता हूं क्योंकि यह लंबे समय तक खोने वाला प्रस्ताव है। आप संभवतः सभी विकल्पों का एक संकर करेंगे: प्रतिलिपि, फिक्स्चर, मॉकिंग, अर्द्ध-यादृच्छिक डेटा।

1

कुछ विकल्प, बढ़ती जटिलता के क्रम में:

  • आप सभी को लाइव मास्टर DB से कनेक्ट, पढ़ने/लिखने की अनुमति। यह जोखिम भरा है, लेकिन मुझे लगता है कि आप इसे पहले ही कर रहे हैं। सुनिश्चित करें कि आपके पास बैकअप हैं!
  • स्थानीय परीक्षण डीबी को पॉप्युलेट करने के लिए परीक्षण फिक्स्चर का उपयोग करें और बस इसका उपयोग करें। निश्चित नहीं है कि PHP दुनिया में इसके लिए कौन से टूल्स हैं।
  • मास्टर डेटाबेस को कॉपी करें (mysqldump) और इसे अपने स्थानीय मशीनों के MySQL उदाहरणों में आयात करें, फिर अपने स्थानीय MySQL से कनेक्ट करने के लिए अपने dev वातावरण सेट करें। आवश्यक के रूप में डंप/आयात दोहराएं
  • मास्टर से अपने स्थानीय उदाहरणों में एक तरफा प्रतिकृति सेट करें।

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

0
  1. खुद रेपो इसका मतलब यह नहीं करता खुद स्टेजिंग सर्वर (इस config शायद ही बनाए रखा और अत्यंत बुरा बढ़ाया 10-20-100 को डेवलपर्स है)
  2. यह हमेशा जैसे ही बेहतर है संभव (सेमी-) स्वचालित बिल्ड-सिस्टम, जो भंडार-संग्रहीत स्रोत-डेटा को लाइव सिस्टम में परिवर्तित करता है (कम हैंडवर्क - गैर-कोड त्रुटियों को कम करने में कम परिवर्तन) और (शायद) कुछ प्रकार के कंटिन्यूस एकीकरण (अक्सर परीक्षण करें, तेजी से बग ढूंढें)। निर्माण प्रणाली (डीबी हिस्सा) आप केवल प्रारंभिक डेटा (टेबल संरचनाओं, डेटा डंप) तैयार करना है के रूप में (संस्करणीकृत) ग्रन्थ, जो

    • मर्ज के बीच आसानी से एकत्रित करने लायक हैं
    • संभाला और प्रसंस्कृत और परिवर्तित अंतिम प्रयोग करने योग्य वस्तु कोड से, हाथ से नहीं करने के लिए - कोई मानवीय त्रुटि, कोई आपरेशन के हस्तक्षेप
संबंधित मुद्दे