Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Magento Doesn't Run SQL Install/Update Script

Tags:

magento

I have problem with configuration or something else that magento never run my module's sql install/update script!

I use magento-1.4.1.0

Here is my structure folders and files:

\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

Here are the contents of \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>

Here are the contents of \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>

Here is my install SQL script:

<?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();

I have tried to change my module's version and created the upgrade script "mysql4-upgrade-1.0-1.1.php" but still not working, but I could run my module.

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

It's working except the problem I am asking.

Thanks in advance,

Rithy

like image 578
Rithy Avatar asked Sep 01 '10 02:09

Rithy


2 Answers

I noticed that when you changed your version number you created an upgrade for 1.0-1.1, but your version is actually 0.1.0. That may explain why it didn't "upgrade". You may want to delete the row entirely from core resource and let it "reinstall" itself on the next page load.

Or, amend your script so that it is tagged as an upgrade from 0.1.0-0.1.1.

like image 77
Joe Mastey Avatar answered Nov 20 '22 00:11

Joe Mastey


OK, Now I can solve this problem!

  1. In my model, I've tried to create a function to delete the record in the core_resources table which we could use/call from our 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 . Change folder name \app\code\local\RN\ShortUrl\sql\ rn_shorturl_setup\

To \app\code\local\RN\ShortUrl\sql\ shorturl_setup\

Finally I soved it! CHEER!

like image 33
Rithy Avatar answered Nov 20 '22 00:11

Rithy