Як використовувати сценарії настройки для вашого модуля?


22

Я розумію, ви можете використовувати сценарії настройки для власного модуля, оголосивши їх у файлі etc / config.xml вашого модуля в <global>просторі:

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

Потім деякі модулі використовують файл, mysql4-install-0.0.1.phpтоді як інші використовують install-0.0.1.php. Отже, коли я використовую mysql4 перед іменем файлу, а коли я не використовую його?

Крім того, що я можу зробити, коли мій сценарій налаштування не працює, щоб дізнатися, чому це не так?


1
Переконайтеся, що ви видалили запис у таблиці core_resource, щоб повторно запустити налаштування.
Рік Куйперс

На додаток до інших відповідей може бути цікавим прочитати magentocommerce.com/images/uploads/RDBMS_Guide2.pdf Це з Команди Core та описує думки за змінами, внесеними з 1.6 Я думаю, що завжди добре не тільки знати, що має змінився, але й чому.
Celldweller

Відповіді:


21

Від Magento 1.6 і вище вам більше не потрібно використовувати mysql4 через додану підтримку multi-RDBMS.

Щоб дізнатись, чому він не працює, ви можете перевірити на винятк.log або system.log, можливо, Magento coud не знайде клас налаштування. Створення сценарію встановлення досить просто.

Також перевірте посібник Alan Storm: http://alanstorm.com/magento_setup_resources


11

Як @erfan saif, magento отримав підтримку multi-rdbms з 1.6. Але в реальному світі я знаю лише mysql backends.

Важливо розуміти, що magento може мати різні сценарії встановлення / оновлення / даних для різних програм. Якщо вам потрібен спеціальний Index-Type, який підтримується mysql, але не стандартним SQL, ви можете реалізувати скрипт mysql4-install-1.0.0.php. Якщо ваш скрипт загальний, використовуйте install-1.0.0.php

Якщо ви подивитесь на Mage_Core_Model_Resource_Setup, я можу знайти дві найцікавіші речі:

  1. Ви можете назвати свої файли (% s -)% s-VERSION. (Php | sql)
  2. Якщо у вас є два сценарії встановлення (але з сценаріями даних, це однаково (додаток / код / ​​core / Mage / Core / Model / Resource / Setup.php: 520)) magento віддає перевагу спеціалізованому сценарію над загальним сценарієм (як один сподівався б)

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;
}

Будьте уважні, якщо ви називаєте свій скрипт, .sqlвін викликається безпосередньо в базі даних:

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

Крім того, що я можу зробити, коли мій сценарій налаштування не працює, щоб дізнатися, чому це не так?

Я віддаю перевагу die ('sadf') на початку мого файлу встановлення / оновлення, тому що я можу запустити його кілька разів, якщо він викликається, щоб я міг перевірити, чи всі перераховані мені змінні є правильними, перш ніж щось змінити в база даних. Якщо я бачу на екрані "садф", я знаю, сценарій працює.

Я завантажую magento (замість sadf), час налагоджувати, мої дві стандартні помилки:

  1. Я забув додати сценарій до налаштування
  2. У мене каталог sql/забутий, наприклад sql/install-1.0.0.phpзамістьsql/my_module_setup/install-1.0.0.php

І оскільки я думаю, що це тут підходить, будьте обережні зі своїми назвами змінних: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html

UPDATE @ rouven-rieker додав через twitter, що дані та відсутність mysql4- додані в magento 1.6. Якщо вам потрібна зворотна сумісність, будьте обережні!


3

Якщо ваш скрипт не працює, ви також повинні перевірити, чи відповідає версія ваших модулів версії вашого сценарію настройки.

<modules>
    <Your_Module>
        <version>0.0.1</version>
    </Your_Module>
</modules> 

1

Якщо ваш скрипт не працює, скиньте номер версії в core_resource та флеш кеш. Magento кешує версії заздалегідь, схоже, і не вистачає запускати сценарії настройки, коли всі кеші включені. Оскільки ми працюємо з відключеним кешем, ми можемо цього не помітити, але установка на веб-сайті Live через завантаження не працюватиме, якщо кеш увімкнено.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.