Мой скрипт установки расширения Magento не запустится - PullRequest
30 голосов
/ 17 января 2011

Я пытаюсь создать скрипт установки для моего расширения, и по какой-то причине это не будет скрипт установки.Расширение будет отображаться в таблице core_resource, но атрибуты, которые я пытаюсь создать, не будут создаваться.

Я почти уверен, что сценарий даже не вызывается, потому что я поставил exit () в началеи сайт работал нормально.

Вот что у меня есть в моем файле конфигурации XML.Это помещается в глобальный -> путь к ресурсам:

<nie_setup>
    <setup>
        <module>Nie_Nie</module>
    </setup>
    <connection>
        <use>core_setup</use>
    </connection>
</nie_setup>

Мой скрипт установки выглядит следующим образом:

$installer = $this;
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->startSetup();

$setup->addAttribute('customer', 'nie_admin', array(
    'input'                 => 'text',
    'type'                  => 'text',
    'backend'               => '',
    'visible'               => 0,
    'required'          => 0,
    'user_defined'  => 1,
));

$installer->endSetup();

Есть ли что-то очевидное, что я здесь упускаю, что может быть причиной сценарияне побежит?

Ответы [ 8 ]

71 голосов
/ 22 января 2011

Прочтите эту статью , чтобы убедиться, что у вас нет недопонимания относительно того, что делают установочные ресурсы, как они работают и как вы можете их устранять.

Как только вы это сделаете, из всего, что вы сказали в этой ветке вопросов, звучит так, как будто вы «устанавливаете» свой ресурс, но ваш скрипт установки никогда не запускается. Я предполагаю, что номер версии, который вы использовали в

//0.0.1 is your version number
mysql4-install-0.0.1.php

не соответствует версии вашего модуля

<modules>
    <Nie_Nie>
        <version>?.?.?</version>
    </Nie_Nie>
</modules>

Они должны совпадать для запуска скрипта. Я думаю Magento достаточно умен, чтобы запускать предыдущие версии, если он их находит, но код в установочных ресурсах - это тот тип, которому трудно следовать, поэтому я всегда проверяю, совпадают ли они.

В любом случае, вот как вы можете увидеть, какие файлы magento пытается запустить, когда запускает ваш установочный ресурс. Удалите все записи из core_resource, относящиеся к вашему модулю. Очистите кеш. Затем найдите следующие местоположения в классе установки

Приложение / код / ​​ядро ​​/ Mage / Ядро / Модель / Resource / Setup.php

protected function _modifyResourceDb($actionType, $fromVersion, $toVersion)
{
    ... 

    $sqlFilesDir = Mage::getModuleDir('sql', $modName).DS.$this->_resourceName;        

    if (!is_dir($sqlFilesDir) || !is_readable($sqlFilesDir)) {
        return false;
    }

    ...

    $sqlDir->close();

    if (empty($arrAvailableFiles)) {
        return false;
    }

    ...

    $arrModifyFiles = $this->_getModifySqlFiles($actionType, $fromVersion, $toVersion, $arrAvailableFiles);
    if (empty($arrModifyFiles)) {
        return false;
    }

и затем измените их, чтобы добавить некоторые временные исключения отладки

    if (!is_dir($sqlFilesDir) || !is_readable($sqlFilesDir)) {
        throw new Exception("$sqlFilesDir not found");
        return false;
    }

    ...

    if (empty($arrAvailableFiles)) {
        throw new Exception("No files found to run");
        return false;
    }

    ...

    $arrModifyFiles = $this->_getModifySqlFiles($actionType, $fromVersion, $toVersion, $arrAvailableFiles);
    if (empty($arrModifyFiles)) {
        throw new Exception("No valid upgrade files found to run for ");
        return false;
    }

    throw new Exception("If you're getting here, we have a file.  Remove your exceptions here and place one in your installer to make sure it's the one you think it is.");

Перезагрузите страницу, и вы получите сообщение об исключении с жалобами на то, что Magento не может найти. Этого должно быть достаточно, чтобы помочь вам отследить, какой установочный скрипт Magento пытается запустить, но не может найти. Просто не забудьте удалить строку вашего модуля в core_resource и очистить кеш. (Magento кеширует, какие модули нужно проверить для установки / обновления)

Если это не сработает, начните копаться в логике applyAllDataUpdates и выясните, почему класс не включает ваш файл установщика.

14 голосов
/ 24 января 2011

Самый простой и информативный способ отследить эту ошибку - настроить вашу IDE для отладки Magento и установить точку останова в вашем mysql4-install-0.0.1.php.Если точка останова не была достигнута, то вы знаете, есть ли проблема в вашей конфигурации XML.Если точка останова попала в цель, вы можете проследить код, чтобы найти источник ошибки.

Установка может занять у вас полдня, но отладка Magento в режиме реального времени, безусловно, лучший способ выучить и понять код.Сделайте себе одолжение, сделайте инвестиции сейчас.

13 голосов
/ 19 октября 2015

Когда я столкнулся с этой проблемой, мне фактически пришлось отключить кеш.Простое смывание не помогло по какой-либо причине.

3 голосов
/ 25 декабря 2015

Вы можете проверить в Magento, какие модули загружены и какая версия этого модуля загружена:

  1. Перейти к app/code/core/Mage/Core/Model/Resource/Setup.php
  2. Перейти к функции __construct()
  3. В конце функции напишите:

    Mage::log($modName); Mage::log($this->_moduleConfig);

Он будет регистрировать все модули, загруженные с указанным номером версии. Здесь вы можете проверить, загружен ваш модуль или нет.

3 голосов
/ 22 января 2011

Согласно База знаний Magento вы можете попытаться включить тег <class> в свой <setup>. Таким образом вы можете убедиться, что используется правильная модель установки, и (если она зашла так далеко) передает модель в скрипт установки, что исключает необходимость создания $setup вручную.

Проверьте права доступа к файлу сценария установки и каталога, в котором он находится. Иногда я обнаруживаю, что удаление записи из core_resources также помогает запустить процесс.

2 голосов
/ 18 января 2011

Вы должны изменить версию вашего модуля на одну точку вверх, чтобы ваш скрипт обновления выполнялся.

<modules>
    <Nie_Nie>
        <version>1.5.0.0</version>
    </Nie_Nie>
</modules>

Если эта версия равна версии ресурса из core_resources, скрипт обновления таблицы не будет выполнен. И версия должна соответствовать названию вашего скрипта обновления

1 голос
/ 01 августа 2013

У нас была та же проблема для нашего магазина http://www.looxis.de Чтобы обновить используемое расширение, мы передали все файлы через FTP, но база данных не обновлялась сама после очистки кеша.Таким образом, обновленное расширение не удалось запустить, мы не смогли войти в бэкэнд.

В поисках решения мы нашли эту страницу.

Проблема заключалась в том, что мы установили более новую версиюмодуль несколько недель назад, который также приводил к ошибкам из-за конфликта с другими модулями, поэтому мы частично перенесли обратно из нашей резервной копии базы данных некоторые таблицы и также вернули старые файлы.все работало снова,

, когда мы попытались обновить модуль, который теперь был совместим с другим расширением (конфликт был удален), скрипт обновления sql не запустился.

Это былоиз-за таблицы "core_resources."там номер версии модуля был установлен на самую новую версию, которую мы установили за несколько недель до этого - поэтому magento не узнает, что новое обновление было выполнено снова, предполагая, что самая новая версия уже была там.

Мы вручную изменили номер версии на более низкую версию, и boom запустил скрипт обновления, и все работало нормально!

0 голосов
/ 29 мая 2013

Обязательно проверьте файл вашего приложения / etc / modules, убедитесь, что имя вашего модуля является точным и что кодовый пул точно указан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...