Come usare gli script di installazione per il tuo modulo?


22

Mi rendo conto che puoi usare gli script di installazione per il tuo modulo dichiarandoli nel file etc / config.xml del tuo modulo nello <global>spazio in questo modo:

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

Alcuni moduli usano quindi il file mysql4-install-0.0.1.phpmentre altri usano install-0.0.1.php. Quindi, quando uso mysql4 davanti al nome del file e quando non lo uso?

Inoltre, cosa posso fare quando il mio script di installazione non è in esecuzione per scoprire perché non lo è?


1
Assicurati di eliminare la voce nella tabella core_resource per riavviare l'installazione.
Rick Kuipers,

Oltre alle altre risposte potrebbe essere interessante leggere magentocommerce.com/images/uploads/RDBMS_Guide2.pdf Viene dal Core Team e descrive i pensieri dietro le modifiche apportate con 1.6 Penso che sia sempre bello non solo sapere cosa ha cambiato ma anche perché.
Celldweller,

Risposte:


21

Da Magento 1.6 in poi non è più necessario utilizzare mysql4 a causa del supporto multi-RDBMS aggiunto.

Per scoprire perché non è in esecuzione, puoi controllare exception.log o system.log, forse Magento non può trovare la tua classe di installazione. La creazione di uno script di installazione è piuttosto semplice.

Consulta anche la guida di Alan Storm: http://alanstorm.com/magento_setup_resources


11

Come @erfan saif, magento ha ottenuto il supporto multi-rdbms dall'1.6. Ma nel mondo reale, conosco solo backend mysql.

È importante capire che Magento può avere diversi script di installazione / aggiornamento / dati per diversi backend. Se si desidera un tipo di indice speciale supportato da mysql ma non da SQL standard, è possibile implementare uno script mysql4-install-1.0.0.php. Se lo script è generico, utilizzare install-1.0.0.php

Se dai un'occhiata a Mage_Core_Model_Resource_Setup posso trovare due cose interessanti:

  1. Puoi nominare i tuoi file (% s -)% s-VERSION. (Php | sql)
  2. Se hai due script di installazione (ma con script di dati, è lo stesso (app / code / core / Mage / Core / Model / Resource / Setup.php: 520)) magento preferisce lo script specializzato rispetto allo script generico (come uno si aspetterebbe)

app / code / core / Mage / core / Modello / Resource / 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;
}

Fai attenzione, se assegni un nome al tuo script, .sqlquesto viene invocato direttamente nel database:

// 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);

Inoltre, cosa posso fare quando il mio script di installazione non è in esecuzione per scoprire perché non lo è?

Preferisco un die ('sadf') all'inizio del mio file di installazione / aggiornamento, perché posso eseguirlo più volte se viene chiamato, quindi posso controllare, se tutte le variabili che ho impostato sono corrette, prima che qualcosa sia cambiato il database. Se vedo 'sadf' sullo schermo, lo so, lo script è in esecuzione.

I magento carica (invece di sadf), è ora di eseguire il debug, i miei due errori standard sono:

  1. Ho dimenticato di aggiungere lo script alla configurazione
  2. Ho sql/dimenticato la directory , ad es. sql/install-1.0.0.phpInvece disql/my_module_setup/install-1.0.0.php

E poiché penso che si adatti qui, fai attenzione ai nomi delle tue variabili: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html

UPDATE @ rouven-rieker ha aggiunto via twitter che i dati - e mancando mysql4 - sono stati aggiunti in magento 1.6. Se hai bisogno di compatibilità con le versioni precedenti, fai attenzione!


3

Se il tuo script non è in esecuzione, dovresti anche verificare se la versione dei tuoi moduli corrisponde alla versione del tuo script di installazione.

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

1

Se lo script non è in esecuzione, reimpostare il numero di versione in core_resource e svuotare la cache. Magento memorizza le versioni precedenti delle cache in anticipo e manca l'esecuzione degli script di installazione quando tutte le cache sono abilitate. Poiché lavoriamo tutti con la cache disabilitata, potremmo non notarlo, ma l'installazione sul sito Live tramite caricamento non funzionerà se la cache è abilitata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.