Mi Script De Instalación De La Extensión Magento No Se Ejecutará


Estoy intentando crear un script de instalación para mi extensión y por alguna razón no será el script de instalación. La extensión se mostrará en la tabla core_resource, pero los atributos que estoy tratando de crear no se crearán.

Estoy bastante seguro de que el script ni siquiera está siendo llamado porque puse un exit() al principio y el sitio funcionó bien.

Esto es lo que tengo en mi archivo XML de configuración. Esto se coloca dentro de la ruta global -> resources:

<nie_setup>
    <setup>
        <module>Nie_Nie</module>
    </setup>
    <connection>
        <use>core_setup</use>
    </connection>
</nie_setup>

Mi el script de instalación es el siguiente:

$installer = $this;
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->startSetup();

$setup->addAttribute('customer', 'nie_admin', array(
    'input'                 => 'text',
    'type'                  => 'text',
    'backend'               => '',
    'visible'               => 0,
    'required'          => 0,
    'user_defined'  => 1,
));

$installer->endSetup();

¿Hay algo obvio que me falta aquí que sería la razón por la que el script no se ejecutará?

Author: Josh Pennington, 2011-01-17

8 answers

Trabaje a través de este artículo para asegurarse de que no tiene ningún malentendido sobre lo que hacen los recursos de configuración, cómo funcionan y cómo puede solucionarlos.

Una vez que haya hecho eso, de todo lo que ha dicho en este hilo de preguntas, suena como si estuviera "instalado" su recurso, pero que su script de instalación nunca se ejecuta. Mi conjetura es que el número de versión que utilizó en

//0.0.1 is your version number
mysql4-install-0.0.1.php

No coincide con la versión de su módulo

<modules>
    <Nie_Nie>
        <version>?.?.?</version>
    </Nie_Nie>
</modules>

Deben coincidir para que el script se ejecute. Yo creo que Magento es lo suficientemente inteligente como para ejecutar versiones anteriores si las encuentra, pero el código en los recursos de configuración es del tipo que es difícil de seguir, así que siempre me aseguro de que coincidan.

En cualquier caso, así es como puede ver qué archivo(s) magento está tratando de ejecutar cuando ejecuta su recurso de configuración. Borra cualquier entrada de core_resource relacionada con tu módulo. Limpia tu caché. A continuación, encuentre las siguientes ubicaciones en el clase de configuración

App / code/core/Mage/Core/Model/Resource / Setup.php :

protected function _modifyResourceDb($actionType, $fromVersion, $toVersion)
{
    ... 

    $sqlFilesDir = Mage::getModuleDir('sql', $modName).DS.$this->_resourceName;        

    if (!is_dir($sqlFilesDir) || !is_readable($sqlFilesDir)) {
        return false;
    }

    ...

    $sqlDir->close();

    if (empty($arrAvailableFiles)) {
        return false;
    }

    ...

    $arrModifyFiles = $this->_getModifySqlFiles($actionType, $fromVersion, $toVersion, $arrAvailableFiles);
    if (empty($arrModifyFiles)) {
        return false;
    }

Y luego modificarlos para agregar algunas excepciones temporales de depuración

    if (!is_dir($sqlFilesDir) || !is_readable($sqlFilesDir)) {
        throw new Exception("$sqlFilesDir not found");
        return false;
    }

    ...

    if (empty($arrAvailableFiles)) {
        throw new Exception("No files found to run");
        return false;
    }

    ...

    $arrModifyFiles = $this->_getModifySqlFiles($actionType, $fromVersion, $toVersion, $arrAvailableFiles);
    if (empty($arrModifyFiles)) {
        throw new Exception("No valid upgrade files found to run for ");
        return false;
    }

    throw new Exception("If you're getting here, we have a file.  Remove your exceptions here and place one in your installer to make sure it's the one you think it is.");

Vuelva a cargar la página y obtendrá texto de excepción quejándose de lo que Magento no puede encontrar. Eso debería ser suficiente para ayudarlo a rastrear qué script de instalador Magento está tratando de ejecutar, pero no lo encuentra. Solo recuerda borrar la fila de tu módulo en core_resource y borrar tu caché. (Cachés de Magento qué módulos deben verificar para una instalación / actualización)

Si eso no funciona, comienza a indagar en la lógica de applyAllDataUpdates y averigua por qué la clase no incluye tu archivo de instalación.

 69
Author: Alan Storm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-17 09:42:15

La forma más fácil e informativa de rastrear este error es configurar su IDE para depurar Magento y establecer un punto de interrupción en su mysql4-install-0.0.1.php. Si el punto de interrupción no es alcanzado, entonces usted sabe si el problema está en su configuración XML. Si se alcanza el punto de interrupción, puede rastrear a través del código para encontrar la fuente del error.

Puede tardar medio día en configurarse, pero la depuración en vivo de Magento es, con mucho, la mejor manera de aprender y comprender el código. Hágase un favor, haz la inversión ahora.

 14
Author: Jonathan Day,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:07

Cuando encontré este problema, tuve que desactivar la caché. Simplemente lavarlo no ayudó por ninguna razón.

 10
Author: Björn Tantau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-26 09:47:38

Según Magento Knowledgebase podría intentar incluir una etiqueta <class> en su <setup>. De esta manera puede asegurarse de que se utiliza el modelo de instalación correcto y (si llega tan lejos) pasa el modelo a su script de instalación negando la necesidad de crear un $setup manualmente.

Compruebe los permisos de archivo del script de instalación y el directorio en el que se encuentra. A veces encuentro que eliminar el registro de core_resources también ayuda a iniciar el proceso.

 3
Author: clockworkgeek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-21 23:05:18

Puede comprobar en Magento qué módulos se cargan y qué versión de ese módulo se carga:

  1. Ir a app/code/core/Mage/Core/Model/Resource/Setup.php
  2. Ir a la función __construct()
  3. Al final de la función escriba:

    Mage::log($modName); Mage::log($this->_moduleConfig);

Registrará todos los módulos cargados con el número de versión. Aquí puede comprobar si su módulo está cargado o no.

 3
Author: Arvind Bhardwaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-25 12:04:58

Debe cambiar la versión de su módulo un punto arriba, para hacer que su script de actualización se ejecute.

<modules>
    <Nie_Nie>
        <version>1.5.0.0</version>
    </Nie_Nie>
</modules>

Si esta versión es igual a la versión de recurso de core_resources el script de actualización de tabla no se ejecutará. Y la versión debe coincidir con el nombre de su script de actualización

 2
Author: Eugene Tulika,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-17 21:16:31

Tuvimos el mismo problema para nuestra tienda http://www.looxis.de Para actualizar una extensión que tenemos en uso transferimos todos los archivos a través de FTP, pero la base de datos no se actualizaría después de limpiar la caché. Así que la extensión actualizada no se pudo ejecutar, no pudimos iniciar sesión en el backend.

Buscando una solución encontramos esta página.

El problema fue que instalamos una versión más reciente del módulo unas semanas antes, que también produjo errores debido a un conflicto con otros módulos, por lo que transferimos de nuevo parcialmente de nuestra base de datos de copia de seguridad de algunas tablas y también poner de nuevo los archivos antiguos. todo estaba funcionando de nuevo,

Cuando intentamos actualizar nuevamente el módulo, que ahora era compatible con la otra extensión (se eliminó el conflicto), el script de actualización sql no se ejecutaba.

Esto se debió a la tabla "core_resources."allí, el número de versión del módulo se estableció en la versión más reciente que habíamos instalado semanas antes, por lo que magento no reconocer que una nueva actualización se había realizado de nuevo, asumió que la versión más reciente ya estaba allí.

Cambiamos manualmente el número de versión a una versión inferior, y boom, el script de actualización se inició y todo estaba funcionando bien!

 1
Author: Etienne Renaud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-01 10:22:37

Asegúrese de comprobar su archivo app/etc/modules, asegúrese de que el nombre de su módulo es exacto y que el codepool está especificado con precisión.

 0
Author: Coolster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-29 15:34:22