अपने मॉड्यूल के लिए सेटअप स्क्रिप्ट का उपयोग कैसे करें?


22

मुझे एहसास है, आप अपने मॉड्यूल के लिए सेटअप स्क्रिप्ट्स का उपयोग कर सकते हैं उन्हें घोषणा कर सकते हैं आदि / config.xml फ़ाइल को <global>इस के भीतर अंतरिक्ष में:

<resources>
    <catalog_setup>
        <setup>
            <module>Mage_Catalog</module>
            <class>Mage_Catalog_Model_Resource_Setup</class>
        </setup>
    </catalog_setup>
</resources>

कुछ मॉड्यूल तब फ़ाइल का उपयोग करते हैं mysql4-install-0.0.1.phpजबकि अन्य उपयोग करते हैं install-0.0.1.php। तो मैं फाइल के नाम के सामने mysql4 का उपयोग कब करूं और कब उपयोग न करूं?

इसके अलावा, मैं क्या कर सकता हूं जब मेरी सेटअप स्क्रिप्ट यह पता लगाने के लिए नहीं चल रही है कि यह क्यों नहीं है?


1
सुनिश्चित करें कि आपने अपना सेटअप फिर से चलाने के लिए core_resource तालिका में अपनी प्रविष्टि हटा दी है।
रिक कुइपर्स

अन्य उत्तर के अलावा इसे पढ़ने के लिए interesing किया जा सकता है magentocommerce.com/images/uploads/RDBMS_Guide2.pdf यह कोर टीम की ओर से है और बताता है 1.6 के साथ बनाया मुझे लगता है कि यह हमेशा अच्छा न केवल पता करने के लिए है क्या परिवर्तन के पीछे विचार बदल गया है लेकिन यह भी क्यों।
सेलडवेलर

जवाबों:


21

मैगेंटो 1.6 और ऊपर से आपको अतिरिक्त मल्टी-आरडीबीएमएस समर्थन के कारण अब mysql4 का उपयोग करने की आवश्यकता नहीं है।

यह पता लगाने के लिए कि यह क्यों नहीं चल रहा है, आप अपवाद की जांच कर सकते हैं। system या। एक स्थापित स्क्रिप्ट बनाना हालांकि बहुत सीधा है।

एलन स्टॉर्म के गाइड को भी देखें : http://alanstorm.com/magento_setup_resources


11

@Erfan सैफ के रूप में, मैगेंटो को 1.6 के बाद से मल्टी-आरडीबीएम का समर्थन मिला। लेकिन वास्तविक दुनिया में, मैं केवल mysql backends को जानता हूं।

यह समझना महत्वपूर्ण है, कि मैगनेटो के पास अलग-अलग बैकेंड के लिए अलग-अलग इंस्टॉल / अपग्रेड / डेटा स्क्रिप्ट हो सकते हैं। यदि आप एक विशेष अनुक्रमणिका-प्रकार चाहते हैं जो कि mysql द्वारा समर्थित है, लेकिन मानक-SQL द्वारा नहीं है तो आप mysql4-install-1.0.0.php स्क्रिप्ट कार्यान्वित कर सकते हैं। यदि आपकी स्क्रिप्ट सामान्य है, तो install-1.0.0.php का उपयोग करें

यदि आप Mage_Core_Model_Resource_Setup पर एक नज़र डालते हैं, तो मुझे दो इंटरसेस्टिंग विकल्प मिल सकते हैं:

  1. आप अपनी फ़ाइलों (% s -)% s-VERSION का नाम दे सकते हैं। (php | sql)
  2. यदि आपके पास दो इंस्‍टॉल स्क्रिप्ट्स हैं (लेकिन डेटा स्क्रिप्ट्स के साथ, यह एक ही है (ऐप / कोड / कोर / मैज / कोर / मॉडल / रिसोर्स / सेटअप.php: 520)) मैगनेटो जेनेरिक स्क्रिप्ट पर विशेष स्क्रिप्ट पसंद करता है (एक के रूप में) उम्मीद करेंगे)

एप्लिकेशन / कोड / कोर / दाना / कोर / मॉडल / संसाधन / Setup.php: 488

$regExpDb   = sprintf('#^%s-(.*)\.(php|sql)$#i', $actionType);
$regExpType = sprintf('#^%s-%s-(.*)\.(php|sql)$#i', $resModel, $actionType);

while (false !== ($file = $handlerDir->read())) {
    $matches = array();
    if (preg_match($regExpDb, $file, $matches)) {
        $dbFiles[$matches[1]] = $filesDir . DS . $file;
    } else if (preg_match($regExpType, $file, $matches)) {
        $typeFiles[$matches[1]] = $filesDir . DS . $file;
    }
}
[...]
foreach ($typeFiles as $version => $file) {
    $dbFiles[$version] = $file;
}

सावधान रहें, यदि आप अपनी स्क्रिप्ट को नाम देते हैं तो .sqlइसे सीधे डेटाबेस में डाला जाता है:

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

            $result = $this->run($sql);

इसके अलावा, मैं क्या कर सकता हूं जब मेरी सेटअप स्क्रिप्ट यह पता लगाने के लिए नहीं चल रही है कि यह क्यों नहीं है?

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

मैं मैग्नेटो लोड करता हूं (काठी के बजाय), यह डिबग करने का समय है, मेरी दो मानक त्रुटियां हैं:

  1. मुझे स्क्रिप्ट को कॉन्फिगर करने के लिए माफ़ करना है
  2. मेरे पास निर्देशिका को sql/भूल गया है, जैसे sql/install-1.0.0.phpइसके बजायsql/my_module_setup/install-1.0.0.php

और क्योंकि मुझे लगता है कि यह यहाँ फिट बैठता है, अपने चर नामों से सावधान रहें: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html

UPDATE @ rouven-rieker ने ट्विटर के माध्यम से जोड़ा कि डेटा- और मिसिंग mysql4- को magento 1.6 में जोड़ा गया था। यदि आपको पीछे की ओर संगतता की आवश्यकता है तो सावधान रहें!


3

यदि आपकी स्क्रिप्ट नहीं चल रही है, तो आपको यह भी जांचना चाहिए कि क्या आपका मॉड्यूल संस्करण आपके सेटअप-स्क्रिप्ट के संस्करण से मेल खाता है।

<modules>
    <Your_Module>
        <version>0.0.1</version>
    </Your_Module>
</modules> 

1

यदि आपकी स्क्रिप्ट नहीं चल रही है, तो core_resource और flush cache में संस्करण संख्या रीसेट करें। Magento के संस्करण पहले से ही प्रतीत होते हैं और सभी कैश सक्षम होने पर सेटअप स्क्रिप्ट चलाने के लिए याद करते हैं। क्योंकि हम सभी कैश अक्षम के साथ काम करते हैं, इसलिए हम इस पर ध्यान नहीं दे सकते हैं, लेकिन लाइव साइट पर अपलोड के माध्यम से इंस्टॉल करने से कैश सक्षम होने पर काम नहीं करेगा।

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