Intereting Posts
Как создать параметризованное заявление об обновлении базы данных в Yii для предложения IN ()? Как отсортировать массив ассоциативных массивов по значению заданного ключа в PHP? Преобразование хэшей паролей md5 в PHP 5.5 password_hash () преобразовать дату php в формат mysql Как отправить sms с использованием php-скрипта с ftp-сервера Bootstrap Отзывчивый редактор WYSWIG не отправляет входные данные в php Сложный запрос + скрипт разбивки на страницы Использование DOMDocument для анализа HTML с помощью JS-кода Проверка строки для недопустимых символов с использованием регулярного выражения php: сортировать в алфавитном порядке многомерный массив по его ключу? Мультипроцессорная платежная система с PayPal Base64 кодирует загруженный файл, затем сохраняет в базе данных Каков наилучший шаблон проектирования для разработки интерфейса WebPage? Как связать конкретную часть на той же странице с jquery и php? Библиотека клиентов Google Диска PHP Получить список файловых ресурсов

Сценарий установки расширения Magento не будет запущен

Я пытаюсь создать скрипт установки для моего расширения, и по какой-то причине сценарий установки не будет. Расширение будет отображаться в таблице 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(); 

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

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

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

 //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 связанные с вашим модулем. Очистите кеш. Затем найдите следующие места в классе настройки

 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's the one you think it is."); 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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