क्या Magento के डेटाबेस अपग्रेड "लेनदेन" में होता है?


12

हमारे पास यह मुद्दा है:

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

जब हम ग्राहक की लाइव-डीबी को उसकी लाइव-मशीन पर अपग्रेड करने का प्रयास करते हैं (1.8-मैगनेटो को डेटाबेस से कनेक्ट करें और इसे ब्राउज़र में खोलें), यह प्रक्रिया थोड़ी देर के लिए चलती है और 500 त्रुटि में समाप्त होती है।

PHP त्रुटि लॉग खाली है; जैसा कि यह एक साझा होस्ट है, हम अपाचे या mysql सेटिंग्स को नहीं बदल सकते हैं; होस्टर, हालांकि "विशेष im मैगेंटो होस्टिंग", सेटिंग्स बदलने के लिए तैयार नहीं है और मुझे बताता है कि मैं 500 त्रुटि होने पर ब्राउज़र-विंडो को बार-बार ताज़ा करके डेटाबेस-अपग्रेड को समाप्त कर सकता हूं, क्योंकि मैगनेटो को फिर छोटे चरणों में अपग्रेड किया जाएगा। । यह घंटों तक चल सकता है।

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

आपके समय के लिए धन्यवाद!


2
संभवतः प्रासंगिक: एक नया n98-magenrun कमांड जो आपको एक समय में एक माइग्रेशन स्क्रिप्ट चलाने देगा। github.com/netz98/n98-magerun/pull/274
एलन स्टॉर्म

जवाबों:


8

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

आपकी इंजीनियरिंग वृत्ति ध्वनि है, लेकिन व्यवसाय स्टार्टअप प्रोग्रामिंग की वास्तविक दुनिया में जो कुछ भी होता है वह अधिक जटिल / बदसूरत है।

Magento के सेटअप संसाधन प्रणाली एक लेनदेन में अलग-अलग स्क्रिप्ट को लपेटती नहीं है । इसके कई कारण हैं, लेकिन मैंने हमेशा प्राथमिक मान लिया है कि Magento ने MySQL से स्पष्ट रूप से बंधे जीवन की शुरुआत की है, और MySQL में कई / अधिकांश डेटा डेफिनेशन स्टेटमेंट ( ALTER TABLE, इत्यादि) एक अंतर्निहित कमिट का कारण बनते हैं

जब आपको व्यक्तिगत सेटअप संसाधन मिल जाएगा, तो कभी-कभी लेनदेन का उपयोग करें।

#File: app/code/core/Mage/Sales/sql/sales_setup/mysql4-upgrade-1.3.99-1.4.0.0.php
$installer->getConnection()->beginTransaction();
$installer->run("
        UPDATE {$installer->getTable('sales_flat_order')} AS o, {$installer->getTable('sales_order_entity_varchar')} AS od
    //...    

सिस्टम ही स्क्रिप्ट चलाता है और सर्वश्रेष्ठ के लिए उम्मीद करता है।

यदि आप इन संसाधनों को चलाने वाले कोड में रुचि रखते हैं, तो शुरू करने के लिए सबसे अच्छी जगह शायद यहाँ है

#File: app/code/core/Mage/Core/Model/Resource/Setup.php
protected function _modifyResourceDb($actionType, $fromVersion, $toVersion)
{
    //...
}

_modifyResourceDbविधि एक है कि वास्तविक सेटअप संसाधन स्क्रिप्ट भी शामिल है

#File: app/code/core/Mage/Core/Model/Resource/Setup.php
case 'php':
    $conn   = $this->getConnection();
    $result = include $fileName;
    break;
case 'sql':
    $sql = file_get_contents($fileName);
    if (!empty($sql)) {

        $result = $this->run($sql);
    } else {
        $result = true;
    }
    break;

आपकी समस्या का एक बहुत ही हैली समाधान एक अस्थायी कोर-हैक / कोड-पूल-ओवरराइड होगा जो 5-10 के बाद स्पष्ट रूप से बाहर निकलता है, और फिर से चलता है। यह एक सेटअप संसाधन स्क्रिप्ट के माध्यम से आधे रास्ते में नौकायन की संभावना को कम करेगा।

एक बेहतर समाधान, और मेरी व्यक्तिगत "शायद एक दिन" परियोजनाओं में एक कस्टम स्क्रिप्ट होगी जो उन अद्यतनों की जांच करने के लिए मैगेंटो कोर विधियों का उपयोग करती है जिन्हें उन्हें लागू करने की आवश्यकता है, उन्हें सूचीबद्ध करें और उपयोगकर्ताओं को एक-एक करके उनके माध्यम से चलने दें।


महान उत्तर और महान अंतर्दृष्टि, धन्यवाद; टिप के लिए भी मेरी समस्या को हल करने के लिए कैसे। मैंने डेटाबेस को देव-सर्वर पर अपग्रेड करने और नई प्रणाली में "रेडी" डीबी आयात करने के साथ समाप्त किया।
सिमोथेसेरेसेरर

2
एफडब्ल्यूआईडब्ल्यू, कि "शायद एक दिन" परियोजना प्रणाली बन गई: सेटअप: एन98-मैगरुन magerun.net
एलन स्टॉर्म

मुझे बताएं कि आपको वह स्क्रिप्ट कब तैयार हुई @AlanStorm;)
फॉकलेसर

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.