Domanda

Mi rendo conto, è possibile utilizzare script di installazione per il proprio modulo dichiarandoli nel file etc / config.xml del modulo all'interno dello spazio <global> in questo modo:

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

Alcuni moduli quindi utilizzare il file mysql4-install-0.0.1.php, mentre altri utilizzano install-0.0.1.php. Così, quando si usa il MySQL4 davanti al nome del file e, quando posso lo uso?

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

È stato utile?

Soluzione

Da Magento 1.6 e verso l'alto non è necessario per l'uso MySQL4 più a causa della aggiunto supporto multi-RDBMS.

Per scoprire il motivo per cui non è in esecuzione, è possibile controllare l'exception.log o SYSTEM.LOG, forse Magento coudn't trovare la vostra classe di installazione. Creazione di uno script di installazione è però abbastanza semplice.

Anche controllare la guida di Alan Storm: http://alanstorm.com/magento_setup_resources

Altri suggerimenti

Come saif @erfan, Magento ha multi-RDBMS supportano dal 1.6. Ma nel mondo reale, lo so backend solo MySQL.

E 'importante capire, che Magento può avere diverse installare / aggiornare / scripts di dati per diversi backend. Se si desidera uno speciale indice-Type che è supportato da MySQL, ma non con standard SQL è possibile implementare uno script MySQL4-install-1.0.0.php. Se lo script è generico, uso install-1.0.0.php

Se si dà un'occhiata in Mage_Core_Model_Resource_Setup riesco a trovare due cose interessting:

  1. È possibile assegnare un nome file (% s -)% s-VERSION. (Php | sql)
  2. Se si dispone di due script di installazione (ma con gli script di dati, è lo stesso (app / code / core / Mage / core / Modello / Resource / setup.php: 520)) Magento preferisce lo script specializzata sopra lo script generici (come ci 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;
}

Attenzione, se il nome del tuo .sql lo script viene richiamato 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 il motivo per cui non lo è?

Io preferisco un dado ( 'SADF') all'inizio del mio file di installazione / aggiornamento, perché posso eseguire più volte se viene chiamato, in modo da poter controllare, castrato tutte le variabili che ho impostato sono corretti, prima di tutto è cambiato nel database. Se vedo il 'SADF' sullo schermo, lo so, lo script è in esecuzione.

I Magento carichi (al posto del SADF), è il momento di eseguire il debug, i miei due errori standard sono:

  1. Ho forgotton aggiungere lo script per la configurazione
  2. Ho la directory in sql/ dimenticato, per esempio sql/install-1.0.0.php invece di sql/my_module_setup/install-1.0.0.php

E perché penso che si adatta qui, state attenti con i vostri nomi di variabili: http: //blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html

UPDATE @ Rouven-Rieker ha aggiunto via Twitter che dati- e mysql4- mancante è stata aggiunta in Magento 1.6. Se avete bisogno di compatibilità all'indietro state attenti!

Se lo script non è in esecuzione si dovrebbe anche verificare se la versione dei moduli corrisponda alla versione del setup-script.

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

Se lo script non è in esecuzione, il numero di versione di reset in core_resource e la cache a filo. Magento memorizza nella cache versioni in anticipo che sembra e che esce di eseguire script di installazione quando tutte le cache sono abilitati. Perché noi tutto il lavoro con la cache disabili, potremmo non notare questo, ma l'installazione in loco dal vivo mediante caricamento non funziona se la cache è attivata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top