Как использовать установочные скрипты для вашего модуля?

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 перед именем файла и когда я не использую это?

Кроме того, что я могу сделать, когда мой скрипт установки не запущен, чтобы выяснить, почему это не так?

mpaepper
источник
1
Убедитесь, что вы удалили свою запись в таблице core_resource, чтобы снова запустить установку.
Рик Кейперс
В дополнение к другим ответам было бы интересно прочитать magentocommerce.com/images/uploads/RDBMS_Guide2.pdf Это из основной команды и описывает мысли, стоящие за изменениями, внесенными в 1.6. Я думаю, что это всегда хорошо, не только знать, что изменилось, но и почему.
Celldweller

Ответы:

21

Начиная с версии Magento 1.6 и выше, вам больше не нужно использовать mysql4 из-за дополнительной поддержки нескольких СУБД.

Чтобы выяснить, почему он не работает, вы можете проверить файл exception.log или system.log, возможно, Magento не найдет ваш класс установки. Однако создать скрипт установки довольно просто.

Также проверьте руководство Алана Шторма: http://alanstorm.com/magento_setup_resources

Erfan
источник
11

Как и @erfan saif, magento получил поддержку multi-rdbms с 1.6. Но в реальном мире я знаю только бэкенды mysql.

Важно понимать, что 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. Если у вас есть два сценария установки (но со сценариями данных, это одно и то же (app / code / core / Mage / Core / Model / Resource / Setup.php: 520)) magento предпочитает специализированный сценарий, а не общий сценарий (как один ожидал)

Приложение / код / ​​ядро ​​/ Mage / Ядро / Модель / 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') в начале моего файла установки / обновления, потому что я могу запустить его несколько раз, если он вызывается, так что я могу проверить, все ли переменные, которые я установил, верны, прежде чем что-либо изменить в база данных. Если я вижу «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 добавил через твиттер, что данные и отсутствующий mysql4 были добавлены в magento 1.6. Если вам нужна обратная совместимость, будьте осторожны!

Фабиан Блехшмидт
источник
3

Если ваш скрипт не запущен, вам также следует проверить, совпадает ли версия ваших модулей с версией вашего скрипта setup.

<modules>
    <Your_Module>
        <version>0.0.1</version>
    </Your_Module>
</modules> 
Анна Фёлькл
источник
1

Если ваш скрипт не работает, сбросьте номер версии в core_resource и очистите кеш. Magento кеширует версии заранее, кажется, и пропускает скрипты установки, когда все кеши включены. Поскольку все мы работаем с отключенным кешем, мы можем этого не заметить, но установка на Live-сайт с помощью загрузки не будет работать, если кеш включен.

Петар Джамбазов
источник