Подтвердить что ты не робот

Моя установка расширения Magento Script не будет запущена

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

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

Вот что я имею в своем файле конфигурации XML. Это находится внутри глобального → пути ресурсов:

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

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

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

Есть ли что-то очевидное, что мне не хватает здесь, что было бы причиной того, что script не будет работать?

4b9b3361

Ответ 1

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

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

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

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

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

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

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

File: app/code/core/Mage/Core/Model/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 the one you think it is.");

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

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

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

Ответ 6

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

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

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

Ответ 7

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

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

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

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

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

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

Ответ 8

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