2010-09-01 9 views
5

Tengo un problema con la configuración u otra cosa que magento nunca ejecute el script sql install/update de mi módulo!Magento no ejecuta la secuencia de comandos de instalación/actualización de SQL

utilizo magento-1.4.1.0

Aquí es mis carpetas y archivos de estructura:

\app\code\local\RN\ShortUrl 
\app\code\local\RN\ShortUrl\Block\ShortUrl.php 

\app\code\local\RN\ShortUrl\controllers\IndexController.php 
\app\code\local\RN\ShortUrl\controllers\UController.php 

\app\code\local\RN\ShortUrl\etc\config.xml 

\app\code\local\RN\ShortUrl\Helper\Url.php 

\app\code\local\RN\ShortUrl\Model\ShortUrl.php 
\app\code\local\RN\ShortUrl\Model\Mysql4\ShortUrl.php 
\app\code\local\RN\ShortUrl\Model\Mysql4\ShortUrl\Collection.php 

\app\code\local\RN\ShortUrl\Model 
\app\code\local\RN\ShortUrl\Model\Mysql4 
\app\code\local\RN\ShortUrl\Model\Mysql4\ShortUrl 

\app\code\local\RN\ShortUrl\sql\rn_shorturl_setup\mysql4-install-0.1.0.php 

Estos son los contenidos de \app\etc\modules\RN_ShortUrl.xml:

<?xml version="1.0" encoding="UTF-8"?>  
<config> 
    <modules> 
     <RN_ShortUrl> 
      <active>true</active> 
      <codePool>local</codePool> 
     </RN_ShortUrl> 
    </modules> 
</config> 

aquí están los contenidos de \app\code\local\RN\ShortUrl\etc\config.xml :

<?xml version="1.0"?> 
<config> 
<modules> 
    <RN_ShortUrl> 
     <version>0.1.0</version> 
    </RN_ShortUrl> 
</modules> 
<frontend> 
    <routers> 
     <shorturl> 
      <use>standard</use> 
      <args> 
       <module>RN_ShortUrl</module> 
       <frontName>shorturl</frontName> 
      </args> 
     </shorturl> 
    </routers> 
    <layout> 
     <updates> 
      <shorturl> 
       <file>shorturl.xml</file> 
      </shorturl> 
     </updates> 
    </layout> 
</frontend> 
<global> 
    <blocks> 
     <rn_shorturl> 
      <class>RN_ShortUrl_Block</class> 
     </rn_shorturl> 
    </blocks> 
    <rewrite> 
     <rn_shorturl> 
      <from>#^/u/(.*)#</from> 
      <to>/shorturl/u/redirect/key/$1</to> 
     </rn_shorturl> 
    </rewrite> 

    <models> 
     <shorturl> 
      <class>RN_ShortUrl_Model</class> 
      <resourceModel>shorturl_mysql4</resourceModel> 
     </shorturl> 
     <shorturl_mysql4> 
      <class>RN_ShortUrl_Model_Mysql4</class> 
      <entities> 
       <shorturl> 
        <table>shorturl</table> 
       </shorturl> 
      </entities> 
     </shorturl_mysql4> 
    </models> 
    <resources> 
     <shorturl_setup> 
      <setup> 
       <module>RN_ShortUrl</module> 
      </setup> 
      <connection> 
       <use>core_setup</use> 
      </connection> 
     </shorturl_setup> 
     <shorturl_write> 
      <connection> 
       <use>core_write</use> 
      </connection> 
     </shorturl_write> 
     <shorturl_read> 
      <connection> 
       <use>core_read</use> 
      </connection> 
     </shorturl_read> 
    </resources> 
    <helpers> 
     <shorturl> 
      <class>RN_ShortUrl_Helper</class> 
     </shorturl> 
    </helpers> 
</global> 

Aquí está mi script de instalación de SQL:

<?php 
    $installer = $this; 
    $installer->startSetup(); 

    $installer->run(" 
      DROP TABLE IF EXISTS {$this->getTable('shorturl')}; 
      CREATE TABLE {$this->getTable('shorturl')} (
      `shorturl_id` INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
      `shorted_key` VARCHAR(255) COLLATE utf8_general_ci NOT NULL DEFAULT '', 
      `long_url` VARCHAR(255) COLLATE utf8_general_ci NOT NULL DEFAULT '', 
      PRIMARY KEY (`shorturl_id`), 
      INDEX (shorted_key), 
      INDEX (long_url) 
      )ENGINE=InnoDB CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';" 
    ); 

    /* right before this */ 
    $installer->endSetup(); 

he tratado de cambiar la versión de mi módulo y creado el script de actualización "MySQL4-upgrade-1.0-1.1.php", pero aún no funciona, pero podría ejecutar mi módulo.

http://magento.test/shorturl/index/generate/?url=http://realestate.cambodiachic.com/property-detail-hotel-restaurant-on-kampot-river-93.html

Está funcionando excepto el problema que estoy pidiendo.

Gracias de antemano,

Rithy

+1

Sugerencia: si desea obtener respuestas a las preguntas, no ** ponga ** palabras como "Urgente" en el título – NullUserException

+0

ok gracias por su comentario! – Rithy

Respuesta

3

OK, ¡Ahora puedo resolver este problema!

  1. En mi modelo, he intentado crear una función para eliminar el registro en la tabla core_resources que podríamos usar/llamar desde nuestro helper.

\ app \ code \ Local \ RN \ Shorturl \ Model \ ShortUrl.php

public function removeShortedUrlModule() 
    { 
     $sql = "DELETE FROM `core_resource` 
     WHERE `code`='shorturl_setup';"; 
     $connection = Mage::getSingleton('core/resource')->getConnection('core_write');  
     try { 
      $connection->query($sql); 
      die('deleted module in core_resource!'); 
     } catch (Exception $e){ 
      echo $e->getMessage(); 
     } 
    } 

2. Cambiar nombre de la carpeta \ app \ code \ Local \ RN \ Shorturl \ sql \ rn_shorturl_setup \

A \ APP \ code \ Local \ RN \ Shorturl \ sql \ shorturl_setup \

Finalmente soved se ! ¡ANIMAR!

4

he notado que cuando usted cambió su número de versión que ha creado una actualización de 1,0-1,1, pero su versión es en realidad 0.1.0. Eso puede explicar por qué no se "actualizó". Es posible que desee eliminar la fila por completo del recurso principal y dejar que se "reinstale" en la carga de la página siguiente.

O bien, modifique su secuencia de comandos para que se etiquete como una actualización de 0.1.0-0.1.1.

+0

cómo eliminar la fila por completo del recurso principal? Mi base de datos está en vm ware y actualmente no sé cómo acceder para ver la base de datos ... – Rithy

+0

Si no tiene acceso a la base de datos, la ruta más fácil será corregir el script de actualización para usar las versiones correctas. –

+0

¿Podría darme algún concepto sobre cómo nombrar el archivo de script de actualización? actualmente la versión de mi módulo en 0.2.1 y creé un nombre de archivo mysql4-upgrade-0.2.0-0.2.1.php pero todavía no se ejecuta. – Rithy

Cuestiones relacionadas