¿Cómo usar los scripts de configuración para su módulo?

22

Me doy cuenta de que puede usar scripts de configuración para su propio módulo declarándolos en el archivo etc / config.xml de su módulo dentro del <global>espacio de esta manera:

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

Algunos módulos usan el archivo mysql4-install-0.0.1.phpmientras que otros lo usan install-0.0.1.php. Entonces, ¿cuándo uso el mysql4 delante del nombre del archivo y cuándo no lo uso?

Además, ¿qué puedo hacer cuando mi script de configuración no se está ejecutando para descubrir por qué no?

mpaepper
fuente
1
Asegúrese de eliminar su entrada en la tabla core_resource para que su configuración vuelva a ejecutarse.
Rick Kuipers el
Además de las otras respuestas, podría ser interesante leer magentocommerce.com/images/uploads/RDBMS_Guide2.pdf Es del Equipo Central y describe los pensamientos detrás de los cambios realizados con 1.6 Creo que siempre es bueno no solo saber qué cambiado pero también por qué.
Celldweller

Respuestas:

21

Desde Magento 1.6 y versiones posteriores, ya no necesita usar mysql4 debido a la compatibilidad con múltiples RDBMS.

Para averiguar por qué no se está ejecutando, puede consultar el archivo exception.log o system.log, tal vez Magento no pueda encontrar su clase de configuración. Sin embargo, crear un script de instalación es bastante sencillo.

Consulte también la guía de Alan Storm: http://alanstorm.com/magento_setup_resources

Erfan
fuente
11

Como @erfan saif, magento obtuvo soporte multi-rdbms desde 1.6. Pero en el mundo real, solo conozco backends mysql.

Es importante comprender que Magento puede tener diferentes scripts de instalación / actualización / datos para diferentes backends. Si desea un tipo de índice especial que sea compatible con mysql pero no con SQL estándar, puede implementar un script mysql4-install-1.0.0.php. Si su script es genérico, use install-1.0.0.php

Si echas un vistazo a Mage_Core_Model_Resource_Setup, puedo encontrar dos cosas interesantes:

  1. Puede nombrar sus archivos (% s -)% s-VERSION. (Php | sql)
  2. Si tiene dos scripts de instalación (pero con scripts de datos, es el mismo (app / code / core / Mage / Core / Model / Resource / Setup.php: 520)) magento prefiere el script especializado sobre el script genérico (como uno Esperaría)

app / code / core / Mage / Core / Model / 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;
}

Tenga cuidado, si nombra su script .sql, se invoca directamente en la base de datos:

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

Además, ¿qué puedo hacer cuando mi script de configuración no se está ejecutando para descubrir por qué no?

Prefiero un dado ('sadf') al comienzo de mi archivo de instalación / actualización, porque puedo ejecutarlo varias veces si se llama, por lo que puedo verificar, si todas las variables que configuro son correctas, antes de que algo cambie la base de datos. Si veo el 'sadf' en la pantalla, lo sé, el script se está ejecutando.

Realizo cargas (en lugar de sadf), es hora de depurar, mis dos errores estándar son:

  1. He olvidado agregar el script a la configuración
  2. Tengo el directorio en sql/olvidado, por ejemplo, en sql/install-1.0.0.phplugar desql/my_module_setup/install-1.0.0.php

Y como creo que encaja aquí, tenga cuidado con los nombres de sus variables: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html

ACTUALIZACIÓN @ rouven-rieker agregó a través de Twitter que los datos, y mysql4 faltante, se agregaron en magento 1.6. Si necesita compatibilidad con versiones anteriores, ¡tenga cuidado!

Fabian Blechschmidt
fuente
3

Si su script no se está ejecutando, también debe verificar si la versión de sus módulos coincide con la versión de su script de configuración.

<modules>
    <Your_Module>
        <version>0.0.1</version>
    </Your_Module>
</modules> 
Anna Völkl
fuente
1

Si su script no se está ejecutando, restablezca el número de versión en core_resource y vacíe la memoria caché. Magento almacena en caché las versiones por adelantado, parece y falla ejecutar scripts de configuración cuando todos los cachés están habilitados. Debido a que todos trabajamos con el caché deshabilitado, es posible que no nos demos cuenta de esto, pero la instalación en el sitio en vivo a través de la carga no funcionará si el caché está habilitado.

Petar Dzhambazov
fuente