2012-11-23 25 views
5

के साथ कई वेब अनुप्रयोगों का प्रबंधन करना मैं एक PHP वेब एप्लिकेशन के कई उदाहरणों को प्रबंधित करने के लिए सबसे अच्छा तरीका (या सबसे आसान तरीका) ढूंढ रहा हूं, जो समान कोड बेस साझा करता है।एक ही कोड बेस

मुझे यह आप के लिए तोड़ने के नीचे दो:

हमारे डोमेन उनकी अपनी सेटिंग फ़ाइलों और डेटाबेस के साथ प्रत्येक आवेदन के कई उदाहरण, आयोजन कर रहा है।

http://mydomain.com
|
| ------/ग्राहक 1/
|
| ------/ग्राहक 2/
|
| ------/customer3/+ कस्टम

की है कि ग्राहक 1 & 2 आवेदन खरीदा (कि हम उनके लिए की मेजबानी) मान लीजिए सुविधाओं, और वे उस आवेदन के बेस मॉडल की है। (यानी अनुकूलित नहीं)

हालांकि, ग्राहक 3 विशेषता एक्स या वाई चाहता है, इसलिए हम उसके लिए उस सुविधा को कोड करते हैं और उसे एप्लिकेशन में जोड़ते हैं।

लेकिन जब भी कोड आधार (यानी ढांचे के मूल वर्गों में एक सुरक्षा फिक्स) के लिए कोई अद्यतन होता है तो सभी तीन ग्राहकों को बेस कोड का अद्यतन मिलना चाहिए!

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

गिट का उपयोग शायद एक समाधान है, लेकिन मैं कैसे जाउंगा और ऐसा करूं? प्रति ग्राहक अलग भंडार बनाएँ? क्या होगा अगर हम सौ से अधिक ग्राहकों तक बढ़ जाएंगे?

कोई अंतर्दृष्टि स्वागत है, जिसमें हमें ऐसे सेटअप का उपयोग क्यों करना चाहिए या नहीं करना चाहिए। (लेकिन याद रखें कि हम अपने ग्राहकों के लिए आवेदन होस्ट करने वाले होंगे)

+0

ये सुविधाएं कैसे सेट की गई हैं? एक मॉड्यूल आधारित सेटअप सबसे अधिक संभावना है, इसलिए आप डेटाबेस तालिका का उपयोग कर सकते हैं: क्लाइंट -> सुविधा 1 -> ऑफ, क्लाइंट 2 -> सुविधा 2 -> चालू, और कोड में उस सुविधा को सक्षम या अक्षम करें। –

+0

विशेषताएं मॉड्यूलर हैं, क्योंकि यह ढांचे द्वारा समर्थित है। –

उत्तर

1

मुझे याद है कि इस साल पहले ऐसा करना है, इसलिए आपको ध्यान रखना होगा कि मैं अब थोड़ा सा जंगली हूं।

मैंने एक स्टैंडअलोन फ्रेमवर्क बनाया, जिसमें सभी को एक .php फ़ाइल में शामिल किया गया। इसका उपयोग करने वाले किसी भी ढांचे, एक पूर्ण अनुरोध करेंगे और यदि उनके ढांचे के एमडी 5 केंद्रीय सर्वर पर ढांचे से मेल खाते हैं तो कोई अपडेट की आवश्यकता नहीं थी। अन्यथा यह https पर नया ढांचा डाउनलोड करेगा और इसकी अपनी प्रतिलिपि को प्रतिस्थापित करेगा। इसने एक स्वचालित अद्यतन प्रणाली बनाई जो इसे इस्तेमाल किए गए सभी अन्य ऐप्स के लिए PULLED था।

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

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

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

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

डिज़ाइन के अनुसार, आप अन्य भाषा ढांचे को देखने के लिए सबसे अच्छे हैं और देखें कि वे क्या करते हैं। आपको अच्छे डिजाइन सिद्धांतों के साथ रहना चाहिए, केवल लागू होने पर डिज़ाइन पैटर्न का उपयोग करना चाहिए, और एमवीसी का ध्यान रखना चाहिए!

अतिरिक्त पठन ...

यह कोई आसान काम नहीं है, तो चेतावनी दी।

+0

और पढ़ें पढ़ने भाग – VBAssassin

+0

मैं पहले से ही एक एमवीसी ढांचे का उपयोग कर रहा हूँ, जिसे मॉड्यूल के साथ विस्तारित किया जा सकता है। आपके द्वारा प्रदान किए गए लिंक पर एक नज़र डालेंगे, धन्यवाद! –

+0

क्या यह एक कस्टम निर्मित ढांचा है, ओपन सोर्स एक या वाणिज्यिक एक है? – VBAssassin

0

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

1

आप सिस्टम

उत्तर 1-सेंट पर रहने के लिए एक सवाल

  • विकास और भिन्नताएं कोड
  • से (किसी भी) एससीएम कोड की तैनाती के समर्थन में दो अलग-अलग विभिन्न कार्यों मिलाया प्रश्न (के लिए आधुनिक) एससीएम शाखाओं को शाखाबद्ध और विलय कर रहा है (प्रत्येक ग्राहक की अपनी शाखा होती है, जिसमें आप एक ही विकास-शाखा से आवश्यक हिस्सों को मर्ज करते हैं, या/बेहतर/"शाखा-प्रति-कार्य" के साथ आप कार्य- branc सभी आवश्यक लक्ष्यों में ज, परहेज चेरी पिकिंग)

    उत्तर 2-nd पर सवाल "बिल्ड-उपकरण" है, जो अपने एससीएम के साथ बातचीत कर सकते हैं (यदि आप अधिक विस्तृत जवाब के लिए बाद में अधिक विवरण लिखने के लिए है)

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