开发者

Magento Doesn't Run SQL Install/Update Script

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 D开发者_如何学CEFAULT '',
            `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


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.


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!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜