देव और ठेस के बीच वर्डप्रेस डेटाबेस सिंक


19

फ़ाइलों और साथ ही दो Wordpress स्थापनाओं के बीच डेटाबेस को सिंक्रनाइज़ करने के तरीके के बारे में पहले प्रश्न पूछा गया है।

डेटाबेस स्तर के लिए, उत्तर आम तौर पर मूल रूप से एक डेटाबेस को डंप करने और इसे दूसरे सर्वर पर डालने के लिए होता है। इसके साथ समस्या यह है कि आप किसी भी परिवर्तन को समाप्त करते हैं जो संभावित रूप से ठेस सर्वर पर किए गए हैं। उदाहरण के लिए, उपयोग मैट्रिक्स, टिप्पणियाँ, आदि ...

इसे ध्यान में रखते हुए, मुझे आश्चर्य होने लगा था कि क्या Wordpress ORM को विस्तारित करना संभव होगा, ताकि आप डेल्टास उत्पन्न कर सकें और फिर उन ठिकानों पर इंजेक्शन लगा सकें।

क्या किसी ने यह कोशिश की है, इसे देख रहा है, या कोई विचार या टिप्पणी है?


1
मैंने इसे देखा है, हाँ, लेकिन बहुत कुछ पूरा नहीं किया है। यदि आप किसी अन्य CMS प्लेटफॉर्म के साथ प्रूफ-ऑफ-कॉन्सेप्ट की ओर इशारा कर सकते हैं, तो मुझे यकीन है कि हम इसे वर्डप्रेस के लिए रिजेक्ट कर सकते हैं।
एमान

प्रतिकृति के बारे में कैसे?
कोवशीनिन

अच्छी तरह से mysql के साथ प्रतिकृति को मास्टर-मास्टर प्रतिकृति के कुछ रूप की आवश्यकता होगी जो कि PITA है। यदि आप इस तथ्य में कारक हैं कि यह देव और ठेस के बीच है, तो प्रतिकृति में देरी होगी जो कि संभवतः हर समय टूट जाएगी।
jonathanserafini

जवाबों:


11

वास्तविकता यह है कि हम जो चाहते हैं वह यह है: http://www.liquibase.org/

लिकिबेज एक खुला स्रोत (अपाचे 2.0 लाइसेंस प्राप्त) है, जो डेटाबेस परिवर्तनों को ट्रैक करने, प्रबंधित करने और लागू करने के लिए डेटाबेस-स्वतंत्र पुस्तकालय है। यह एक सरल आधार पर बनाया गया है: सभी डेटाबेस परिवर्तनों को एक मानव पठनीय अभी तक ट्रैक करने योग्य रूप में संग्रहीत किया जाता है और स्रोत नियंत्रण में जांच की जाती है।

हालाँकि हमारी विकास प्रक्रिया इसका समर्थन नहीं करती है। हम आम तौर पर असतत स्क्रिप्ट के माध्यम से डेटाबेस को संशोधित नहीं करते हैं जो हम खुद लिखते हैं, हम उन प्लगइन्स का उपयोग करते हैं जिन्हें हम सक्रिय करते हैं। हम लुक-अप डेटा को संशोधित करने के लिए DML स्क्रिप्ट नहीं लिखते हैं जो हम तब सोर्स कोड कंट्रोल में जांचते हैं, हम एडमिन पेज पर UI का उपयोग करते हैं और इसलिए माइग्रेशन के दौरान उस परिवर्तन को दोहराने के लिए बाद में उपयोग के लिए कोई सोर्स कोड नहीं होता है।

हालाँकि, हम इसका कुछ अनुकरण कर सकते हैं - इस पृष्ठ पर सूचीबद्ध कुछ उपकरणों का उपयोग करते हुए:

/programming//q/225772/149060

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

MySQLDiff (StackOverflow प्रश्न पर चर्चा) स्कीमा भिन्न होता है, और यह लेखक मेज-वार डेटा भिन्नता के लिए mysql_coldiff की सिफारिश करता है - दोनों पर्ल में लागू होते हैं, यदि जावा उपकरण (लिक्विडबेस आपके सर्वर के लिए बहुत अधिक संसाधन हैं - हालांकि दोनों डेटाबेस को स्थानीय रूप से लाएं और अपने पीसी पर उपकरण चलाने से समस्या हल हो जाती है ...

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

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

अगर हम प्रेरणा के लिए @bueltge के इंस्ट्रूमेंट हुक कॉल्स प्लगइन के कोड को देखते हैं: https://gist.github.com/1000143 (SAVEQUERIES और शटडाउन हुक की दिशा में मुझे इंगित करने के लिए G + के माध्यम से रॉन रेनिक के लिए धन्यवाद), मुझे इसे खोजने के लिए नेतृत्व)

- इसके बजाय SAVEQUERIES आउटपुट प्राप्त करने के लिए इसे बदल दें 
- एडमिन में रहते हुए ही चलाएं 
- सभी चयनों को फ़िल्टर करें 
- शटडाउन हुक में तालिका के लिए परिणाम सहेजें 
- इस समय हम जो कर रहे थे, उसके आधार पर हम आउटपुट ट्रैपिंग को चुन सकते हैं।  

उदाहरण के लिए:

कैप्चर नाम: प्लगिन XYZ को सक्रिय और कॉन्फ़िगर करें

कैप्चर स्टेट टॉगल - ऑन

... प्लगइन स्थापित करें और कॉन्फ़िगर करें XYZ

कैप्चर स्टेट टॉगल - ऑफ

निर्यात माइग्रेशन स्क्रिप्ट के लिए: सक्रिय करें और प्लगइन XYZ कॉन्फ़िगर करें

प्रेस एक्सपोर्ट बटन - फ़िल्टर किए गए एसक्यूएल के साथ पॉपअप टेक्स्ट फ़ील्ड का उत्पादन करने के लिए - आदर्श रूप से पूर्व-स्वरूपित एक शेल स्क्रिप्ट के रूप में कमांड लाइन कॉल के साथ mysql। इसे अपने माइग्रेशन कोड फ़ोल्डर में कॉपी और पेस्ट करें और अपने सोर्स कोड रिपॉजिटरी में जोड़ें।

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

क्या बेहतर है, आपके पास एक स्क्रिप्ट (या उसी की श्रृंखला) होगी जिसे आप टेस्ट कर सकते हैं। नकल करने योग्य, परीक्षण करने योग्य, माइग्रेशन स्क्रिप्ट !!

मैं पहले से ही प्यार में हूँ।

कोई और?


2
अच्छा लिख ​​दिया। मैं इस समस्या पर बहुत समय बिता रहा हूं क्योंकि मुझे ग्राहकों को हमारी मदद की तलाश है। यह वास्तव में एक कठिन समस्या है, लेकिन हमने तय किया है कि एसक्यूएल के स्तर तक नीचे जाना शायद "उबालने का एक बहुत " समाधान है जिसका अर्थ है कि इसे 100% काम करने की संभावना नहीं है। मुझे लगता है कि समाधान स्पष्ट कोड के साथ एक "विभाजन और जीत" दृष्टिकोण का उपयोग करता है जो वर्डप्रेस की संरचना को समझता है, और जो किसी और चीज के लिए हुक प्रदान करता है। मुझे उम्मीद है कि हम भविष्य में किसी बिंदु पर सार्वजनिक रूप से एक व्यवहार्य समाधान पेश कर सकते हैं।
माइकस्किंकल

तो .... यह कौन बनाना चाहता है?
डेव चुंबन

किसी को भी देखने के लिए, ऐसा लगता है कि यह एक ही विचार एक प्लगइन के रूप में उपलब्ध है: wordpress.org/plugins/query-refox
majick

3

डाटाबेस सिंक WordPress प्लग इन दो सर्वर के बीच डेटा सिंक कर के एक महान काम करता है।

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

मैंने अपने परिवर्तन अभी तक जनता के लिए जारी नहीं किए हैं, लेकिन यदि आप एक प्रति में रुचि रखते हैं, तो मुझे simon-at-yump.com.au पर एक ईमेल भेजें। अगर किसी को यह उपयोगी लगता है या उसके पास अतिरिक्त सुविधा अनुरोध हैं, तो मुझे बताएं और मैं देखूंगा कि मैं क्या कर सकता हूं।


अद्यतन: मैंने अभी भी WP-Sync-DB प्लगइन पाया है , जो वाणिज्यिक WP-Migrate-DB-Pro प्लगइन का एक कांटा है । यह एक समान कार्य करता है, हालांकि संभवतः डेटाबेस सिंक की तुलना में अधिक पॉलिश है ।


0

इस कार्य के लिए विशेष रूप से एक अपेक्षाकृत नई वाणिज्यिक सेवा है। इसे RAMP कहा जाता है:

http://alexking.org/blog/2011/07/20/ramp-content-deploy-wordpress


1
उस सेवा की सीमाएँ हैं, जो इसे मेरे उपयोग के मामले में फिट नहीं बनाती हैं:
marfarma

2
मेरे उपयोग का मामला - उत्पादन को जोड़ते समय कार्यक्षमता जोड़ना। Quote: "वर्तमान में निम्नलिखित आइटम असमर्थित हैं: सेटिंग्स (कोर और प्लगइन सेटिंग्स, जब तक कि वे RAMP में ऑप्ट-इन नहीं करते हैं)" 99.99% थीम और प्लगइन विकल्प और सेटिंग्स माइग्रेट नहीं होंगे। उत्पादन पर कोड परिवर्तन के बिना, कस्टम पोस्ट-प्रकार माइग्रेट नहीं होंगे। कस्टम टेबल और उनके डेटा को जोड़ने के बारे में भूल जाओ।
मार्फमा

1
उस उत्पाद का एक मान्य उपयोग-मामला है - सामग्री का मंचन और फिर इसे लाइव धक्का देना। दुर्भाग्य से यह वह समस्या नहीं है जिससे मैं चिंतित हूँ। ओपी की जाँच करना, यह स्पष्ट नहीं है कि वह किस केस का उपयोग कर रहा है - इसलिए यह उनकी दुकान के लिए सही समाधान हो सकता है।
marfarma
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.